어제의 나보다 성장한 오늘의 나

[C++] Unique 함수 정리 및 예제 본문

c++/문법

[C++] Unique 함수 정리 및 예제

today_me 2022. 2. 13. 14:58
반응형

◎ 시간 복잡도 : O(N)

◎ 중복된 값을 제거 하기 위해 사용하는 함수

◎ <algorithm> 의 sort와 erase와 함께 사용함.

◎ 반드시 정렬을 해준 뒤 사용한다.

 

헤더파일

 

#include <algorithm>

 

 

사용법

vector<int> v = { 2, 3, 5 , 2, 3, 5 ,4};
    
    
    sort(v.begin() , v.end());
    
    v.erase( unique(v.begin() , v.end()) , v.end());

    for(auto x : v){
        cout << x << ' ';
    }
    
    // 출력 : 2 3 4 5

1) 벡터를 먼저 정렬한다. (sort)

2) unique 사용

3) erase 로 중복된 원소 삭제.

 

 

 

unique 함수에 대해 좀 더 자세히 알아보자

 

① 중복된 원소들을 제거하고 제거된 숫자만큼 벡터를 쓰레기 값으로 채운다.

 

vector<int> v = { 2, 2, 2 , 2, 3, 4 ,5}; //정렬된 벡터

    auto it = unique(v.begin() , v.end());
    
    for(auto x : v){
        cout << x << ' ';  // 출력 : 2 3 4 5 3 4 5
    }
    
    cout << it - v.begin() ; // 4 (2, 3, 4, 5 다음 값을 it가 가리키고 있다.)

 

- 출력값을 보면 뒤 3 , 4 , 5는 기존 벡터에 있던 값이다. 즉 , 2가 삭제된 만큼( 3개 ) 쓰레기 값으로 기존 벡터의 뒷 원소가 들어간다.

- unique는 중복 제거된 원소들 다음 값을 가리키는 iterator를 반환한다.

 

② sort가 필수이다.

 

정렬하지 않고 사용

vector<int> v = { 2, 3, 5 , 2, 3, 5 ,4};
    
    auto it = unique(v.begin() , v.end());
    
    for(auto x : v){
        cout << x << ' ';
    }
    
// 출력 : 2 3 5 2 3 5 4

- unique 알고리즘이 나란히 있는 같은 값을 삭제하는 방식이기 때문에 sort를 하지 않으면

제대로 작동 하지 않는다.

 

반응형
Comments