※배워가고 있는 학생입니다. 틀린 부분이 있다면 댓글로 피드백 부탁드려요😁
알고리즘 문제를 풀다보면, 벡터에서 중복원소를 제거해야 하는 경우가 나온다.
해당 경우에 쉽게 중복원소를 제거할 수 있는 방법을 알아내 정리해보려고 한다!
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
'그외 > C++' 카테고리의 다른 글
[c++] vector<vector<int>> (이차원 벡터) 길이 (0) | 2021.06.13 |
---|---|
[c++] vector<int>v(n) 과 vector<int>v[n]의 차이 (0) | 2021.05.26 |