본문 바로가기
C++/C++

[C++] 벡터 중복 제거

by sihyeong 2022. 11. 19.

벡터의 중복 제거를 위해선 

 

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