vector의 중복 요소를 제거하는 방법을 소개합니다.
1. set를 이용하여 중복 요소 제거
set
는 기본적으로 중복 요소를 허용하지 않는 자료구조입니다. vector의 모든 요소를 set에 저장하고, 다시 set를 vector로 변경하면 중복 요소를 제거할 수 있습니다.
unordered_set
의 생성자에 vector.begin()
, vector.end()
를 전달하면 vector의 모든 요소가 set에 추가됩니다.
반대로 vector의 생성자에 begin과 end를 전달하면 set의 모든 요소가 vector에 추가됩니다.
#include <iostream>
#include <unordered_set>
#include <vector>
int main() {
std::vector<int> int_vec = {1, 2, 5, 3, 2, 5, 9, 7};
// remove duplicates
std::unordered_set<int> int_set(int_vec.begin(), int_vec.end());
// set to vector
std::vector<char> new_vec(int_set.begin(), int_set.end());
for (const int &i: new_vec) {
std::cout << i << ' ';
}
return 0;
}
Output:
7 9 3 5 2 1
2. std::remove()를 이용하여 중복 제거
std::remove(first, last, val)
는 first와 last 범위의 벡터 요소들 중에 val과 일치하는 요소를 제거합니다.
for문으로 현재 순회하는 요소가, 다음 요소부터 마지막 요소 사이에 있으면 모두 삭제하도록 합니다.
remove()
는 vector의 크기, 즉 container 크기를 줄이지는 않기 때문에 erase()
를 이용하여 마지막 삭제된 요소 위치부터 실제 vector의 마지막 위치까지 요소들을 제거해야 합니다.
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> int_vec = {1, 2, 5, 3, 2, 5, 9, 7};
auto end = int_vec.end();
for (auto it = int_vec.begin(); it != end; ++it) {
end = std::remove(it + 1, end, *it);
}
int_vec.erase(end, int_vec.end());
for (const int &i: int_vec) {
std::cout << i << ' ';
}
return 0;
}
Output:
1 2 5 3 9 7
Loading script...
Related Posts
- [C++] 배열을 리스트(list)로 변환
- [C++] 배열에서 특정 요소 제거
- [C++] vector 모든 요소의 합계 계산
- [C++] 두개의 배열이 같은지 비교
- [C++] 배열에 특정 요소가 있는지 확인
- [C++] 2차 배열 복사 방법
- [C++] 배열 복사하는 방법 (copy, memcpy)
- [C++] 함수의 인자로 배열 전달
- [C++] vector 모든 값의 평균 계산
- [C++] vector를 문자열로 변환
- [C++] 배열에서 요소의 Index 찾기
- [C++] 배열의 중복 요소 찾기
- [C++] 배열의 중복 요소 제거
- [C++] 배열 순서 거꾸로 뒤집기
- [C++] char 배열을 string으로 변환
- [C++] string을 char 배열로 변환
- [C++] 문자열 거꾸로 뒤집기
- [C++] vector의 중복 요소 제거
- [C++] 두 배열을 하나의 배열로 합치기
- [C++] 배열 길이, 크기 얻는 방법
- [C++] 배열에서 최대값, 최소값 찾기 (3가지 방법)
- [C++] int를 string으로 변환, 3가지 방법
- [C++] 문자열 리스트(Vector, 배열) 정렬
- [C++] string의 문자 정렬
- [C++] string을 int로 변환, 3가지 방법
- [C++] string 대문자/소문자 변환 방법
- [C++] string.compare() 문자열 비교
- [C++] int를 char로 변환, 3가지 방법
- [C++] 문자열 자르기, 3가지 방법
- [C++] isdigit(), 어떤 문자가 숫자인지 확인
- [C++] strlen(), 문자열 길이 계산
- [C++] strcmp(), strncmp() 함수로 문자열 비교
- [C++] strstr(), 특정 문자열 찾기