본문 바로가기
프로그래밍 언어/C++

[STL] unique 함수 활용한 vector 중복 원소 제거

by 까망 하르방 2021. 7. 29.
반응형

unique 함수란?

- 헤더파일: #include <algorithm>

- vector 배열에서 원소를 중복없이 앞쪽에 채워주는 함수이다.

- 기존 크기는 변화가 없기 때문에 앞쪽에 채워지고 남은 뒷공간에 원소들이 그대로 존재한다.

    ex. {2, 3, 3, 4, 5, 5, 1, 1, 1} → {2, 3, 4, 5, 1, 5, 1, 1, 1}

 

중복 없는 unique한 원소를 앞쪽에 배치해주는 것이라고 볼 수 있다.

원소 배치 및 개수에 따라 뒤쪽에 중복 원소들이 있을 수 있는데 erase 함수 활용해서 제거할 수 있다.

 

즉, vector의 중복 원소를 제거할 수 있다.

이러한 처리해주는 것으로는 STL 중 set 이 존재한다.

▶ [C++] [STL] Set 

 

[C++] [STL] Set

Set - 중복 없는 원소만을 가지는 집합 같은 것이다. (중복 허용 X) - 헤더파일: #include - set에 들어가는 원소는 자동으로 정렬된다. - set은 기본적으로 오름차순(less) 정렬이고 greater 조건자로 내림

zoosso.tistory.com

 

vector에서  erase(v.begin() + s, v.begin() + e)는 [s, e) 원소가 삭제된다.

→ 시작 지점은 닫힌구간, 끝나는 지점은 열린 구간

① unique 함수를 통해서 중복 없는 원소를 앞쪽으로 배치

② erase 함수를 통해서 뒤쪽에 있는 원소 제거

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector <int> v;
    v.push_back(2);
    v.push_back(3); v.push_back(3);
    v.push_back(4);
    v.push_back(5); v.push_back(5);
    v.push_back(1); v.push_back(1); v.push_back(1);
    vector <int> v2 = v;
    
    cout << "<1. vector 배열 원소>" << endl;
    for (const auto& i : v)
    {
        cout << i << ' ';
    }
    cout << endl;

    cout << "\n<2. unique 함수 적용>" << endl;
    unique(v.begin(), v.end());
    for (const auto& i : v)
    {
        cout << i << ' ';
    }
    cout << endl;

    cout << "\n<3. unique + erase 함수 적용>" << endl;
    v2.erase(unique(v2.begin(), v2.end()), v2.end());
    for (const auto& i : v2)
    {
        cout << i << ' ';
    }
    cout << endl;
}

반응형

댓글