벡터의 중복 제거를 위해선
sort(), unique(), erase()를 적절히 사용하면 중복원소를 제거 할 수 있다..
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> s;
s.emplace_back(2);
s.emplace_back(2);
s.emplace_back(3);
s.emplace_back(1);
s.emplace_back(2);
s.emplace_back(1);
for(auto i : s)
{
cout << i << endl;
}
}
2
2
3
1
2
1
위처럼 vector 값을 세팅했을 때
unique()를 호출하면
unique(s.begin(), s.end());
2
3
1
2
1
1
- 제일 첫번째 연속된 중복값 2의 값만 제거되고 제일 끝에 쓰레기값이 들어갔다.
- unique는 연속된 중복값을 제거하고 제일끝에 쓰레기값으로 추가하며 동작한다.
- 따라서 erase()와 같이 사용하면 중복값 지우고, 끝에 쓰레기값까지 삭제하면 연속된 중복값이 삭제된다.
s.erase(unique(s.begin(), s.end()), s.end());
2
3
1
2
1
- unique가 연속된 중복값만에만 동작하니까
- sort()를 통해 연속된 중복값을 만들고 unique()후 erase() 하게되면
- 순서가 보장되지 않는다는 단점이 있긴 하지만, 중복값들을 모두 제거할 수 있다.
sort(s.begin(), s.end());
s.erase(unique(s.begin(), s.end()), s.end());
1
2
3
'C++ > C++' 카테고리의 다른 글
[C++] multiset (1) | 2022.11.24 |
---|---|
[C++] 비트 연산, 비트맵마스크 (1) | 2022.11.20 |
[C++] 미리 컴파일된 헤더 (0) | 2022.11.14 |
[C++] 멀티바이트, 유니코드 (0) | 2022.11.14 |
[C++] wstring (0) | 2022.11.14 |