그외/C++

[c++] vector 중복원소 제거(sort, unique)

세고래 2021. 6. 16. 15:48

※배워가고 있는 학생입니다. 틀린 부분이 있다면 댓글로 피드백 부탁드려요😁

 

알고리즘 문제를 풀다보면, 벡터에서 중복원소를 제거해야 하는 경우가 나온다.

해당 경우에 쉽게 중복원소를 제거할 수 있는 방법을 알아내 정리해보려고 한다! 

 

1) unique 함수

- <algorithm>헤더에 정의되어 있는 함수

- 벡터 내에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수

즉, 벡터 내에서 중복되는 값을 뒤쪽으로 모아줌

- 자신이 바꾼 vector의 end() 반환 (첫번째 중복값의 iterator 반환)

- 앞뒤 원소들을 비교하기 때문에 반드시 sort 로 정렬한 뒤 사용해야 함!

 

2) 중복 원소 지우기

1. 벡터를 정렬(sort)

2. 중복 원소들을 벡터의 뒷부분으로 보내기 (unique)

3. 중복된 원소들을 삭제 (erase)

 

sort(v.begin(), v.end());
v.erase(unique(v.begin(),v.end()),v.end()); //unique 함수를 쓰면 중복값들의 첫번째 위치 iterator 반환

 

가령, vector<int>v 라는 벡터에 중복 원소들이 들어있다고 가정한다면,

중복값을 제거하기 위한 기본 형태는 위의 코드와 같다.

 

 

728x90