Search

unique함수를 이용한 벡터의 중복원소 제거

생성일
2023/01/29 06:25
태그
C++

unique함수를 이용한 벡터의 중복원소 제거

unique 함수

vector 배열에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수이다
중복되지 않는 원소들을 앞에서부터 채워나가는 역할을 하기 때문에, 남은 뒷부분은 그대로 vector 원소값이 존재한다

헤더파일

#include <vector> #include <algorithm>
C++
복사

예시

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector <int> v; v.push_back(1); v.push_back(1); 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(5); v.push_back(6); cout << "***** 기존 벡터배열 원소 *****" << endl; for (const auto& n : v) cout << n << ' '; cout << endl; cout << "***** unique 함수 적용 *****" << endl; unique(v.begin(), v.end()); for (const auto& n : v) cout << n << ' '; cout << endl; return 0; }
C++
복사
unique함수를 적용하면 위와 같이 중복된 원소를 제거하며 앞에서부터 원소들을 채워나간다
그렇게 되면 원래 배열보다 원소의 개수가 4개 줄어들고, 원래 벡터 배열의 나머지 자리엔 기존 벡터 배열 원소의 값이 채워지게 된다
그러면 줄어든 개수를 알면 원래 개수에서 줄어든 범위를 뺀 개수만큼만 확인하면 중복된 원소를 제거한 배열을 출력할 수 있을 것이다
erase 함수를 사용하여 뒷부분에 필요없는 값들을 삭제

erase 함수를 이용하여 필요한 값만 남기기

erase 함수는 vector 배열에서 특정 원소를 삭제하는 함수이다
v.erase(v.begin() + s, v.begin() + e) 명령어를 입력하면 [s, e] 원소가 삭제된다.
즉, 시작 지점은 닫힌구간, 끝나는 지점은 열린 구간으로 삭제 된다
이를 적용하여 unique함수를 적용한 벡터 배열에서 필요한 원소만 뽑아낼 수 있다

예시

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector <int> v; v.push_back(1); v.push_back(1); 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(5); v.push_back(6); cout << "***** 기존 벡터배열 원소 *****" << endl; for (const auto& n : v) cout << n << ' '; cout << endl; cout << "***** erase와 unique 같이 사용하기 *****" << endl; v.erase(unique(v.begin(), v.end()), v.end()); for (const auto& n : v) cout << n << ' '; cout << endl; return 0; }
C++
복사
n개의 원소에 대한 unique함수의 시간복잡도는 O(n)이다