알고리즘/기타 개념

[C++] vector에서 중복된 원소 제거하기

천니 2021. 10. 5. 00:07
728x90

 

코드를 작성할때 정렬한 후에 중복된 원소의 값을 제거해야하는 문제가 나온다.

 

이 때 sort, unique, erase 를 사용하여 코드를 짜면된다.

(#include <algorithm> 을 선언해야한다.)

 

sort 는 그냥 정렬해주는 함수이다.

 

unique

vector 배열에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수이다.

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

반환 값이 vector의 쓰레기 값의 첫 번째 위치이다.

 

erase

erase 함수는 vector 배열에서 특정 원소를 삭제하는 함수이다.

즉 , v.erase(v.begin(), v.end()); 를 하면 v의 원소 모두를 제거해주는 것이다.

( 어디서 부터 어디까지 제거할지 정해야함!)

 

즉, v.erase(unique(v.begin(),v.end()),v.end()); 를 하면 중복되는 부분의 값을 제거해주어 원하는 배열을 얻을 수 있다.

 

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

using namespace std;

int main() {
	vector<int> v = { 1,2,3,3,2,1,1,4,5,6,7 };

	sort(v.begin(), v.end());
	v.erase(unique(v.begin(), v.end()), v.end());

	for (int i = 0; i < v.size(); i++) {
		// 1234567 출력
		cout << v[i];
	}
}

 

 

 

'알고리즘 > 기타 개념' 카테고리의 다른 글

[c++] STL priority_queue 활용법  (0) 2021.10.04
[C++] map container  (0) 2021.09.29
[C++] vector 비우기  (0) 2021.09.12
[C++] string의 변환  (0) 2021.08.27
[C++] upper_bound, lower_bound  (0) 2021.08.26