[C++] container 중복제거 unique,erase

unique 는 특별하다. 라는 뜻으로 사용된다.

반환타입은 해당 STL의 반복자이며, 인접된 중복 자료를 맨 뒤로 보낸다.

무슨 말인고 하니

5 2 3 7 2 3 6 이라는 벡터가 있다하자.

23은 각각 중복이다. 중복을 제거하고 싶으면 unique 를 사용하면된다.

하지만! unique 는 인접된 중복자료만을 다루기 때문에 반드시 정렬해야한다.

algorithmsortstable_sort 를 통하여 먼저 정렬을 하자.

그러면 벡터가 다음과 같다.

2 2 3 3 5 6 7

여기서 unique 를 사용하면

2 3 5 6 7 3 3 이 될것이다.

?? 왜 7 다음이 2 3 이 아니고 3 3 이냐면, 단순히 맨뒤로 때려박기 때문에 3이 두개가 되는것

이다.

중요한 부분은 아니니 스킵해도된다. 우리가 원하는건 뒤에 3 3 을 제거한것이다.

아주 편리하게도 unique7 의 위치를 반복자로 반환하다.

그러므로 이 반복자부터 end 까지 erase 로 지워주면 벡터에서 중복된 자료들을 제거할수 있다.

uniquealgorithm 에 들어있다.

sort( vec.begin(), vec.end() );  
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );