unique 함수와 erase 함수를 활용한 중복 제거

김민수·2025년 1월 22일

C++

목록 보기
60/68

1. std::unique란?

  • std::unique는 인접한 중복 요소를 제거하는 함수다.
  • 이 함수는 컨테이너 내에서 인접한 요소가 같을 경우 하나로 묶고, 중복을 제거한 새로운 순서를 반환한다.
  • 컨테이너 자체를 수정하지 않고, 중복되지 않은 마지막 요소의 위치를 반환한다.

2. 중복 제거

예시

#include <iostream>
#include <vector>
#include <algorithm> // unique, erase

int main() {
    std::vector<int> vec = {1, 2, 2, 3, 4, 4, 4, 5};

    // 정렬 (unique는 인접한 중복만 처리 가능)
    std::sort(vec.begin(), vec.end());

    // unique와 erase로 중복 제거
    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());

    // 결과 출력
    std::cout << "중복 제거 결과: ";
    for (int n : vec) {
        std::cout << n << " ";
    }
    return 0;
}

출력

중복 제거 결과: 1 2 3 4 5
  • std::unique는 인접한 요소의 중복만 제거하므로, 중복을 제거하려면 먼저 정렬이 필요하다.
  • 중복된 값을 컨테이너 뒤쪽으로 이동시키고, 중복되지 않은 값들의 새로운 끝 위치를 반환한다.
    • 예: {1, 2, 2, 3, 4, 4, 4, 5}{1, 2, 3, 4, 5, ?, ?, ?}
  • unique가 반환한 위치부터 끝까지를 erase 함수로 삭제해서 실제로 컨테이너 크기를 줄인다.
profile
안녕하세요

0개의 댓글