unique
는 특별하다. 라는 뜻으로 사용된다.
반환타입은 해당 STL
의 반복자이며, 인접된 중복 자료를 맨 뒤로 보낸다.
무슨 말인고 하니
5 2 3 7 2 3 6
이라는 벡터가 있다하자.
2
와 3
은 각각 중복이다. 중복을 제거하고 싶으면 unique
를 사용하면된다.
하지만! unique
는 인접된 중복자료만을 다루기 때문에 반드시 정렬해야한다.
algorithm
의 sort
나 stable_sort
를 통하여 먼저 정렬을 하자.
그러면 벡터가 다음과 같다.
2 2 3 3 5 6 7
여기서 unique
를 사용하면
2 3 5 6 7 3 3
이 될것이다.
?? 왜 7
다음이 2 3
이 아니고 3 3
이냐면, 단순히 맨뒤로 때려박기 때문에 3
이 두개가 되는것
이다.
중요한 부분은 아니니 스킵해도된다. 우리가 원하는건 뒤에 3 3
을 제거한것이다.
아주 편리하게도 unique
는 7
의 위치를 반복자로 반환하다.
그러므로 이 반복자부터 end
까지 erase
로 지워주면 벡터에서 중복된 자료들을 제거할수 있다.
unique
는 algorithm
에 들어있다.
sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );