map<int, int> mp;
int main() {
vector<int> v{1, 1, 2, 2, 3, 3};
for (int i: v) {
if (mp[i]) {
continue;
}else {
mp[i] = 1;
}
}
// 출력
vector<int> ret;
for (auto it : mp) {
ret.push_back(it.first);
}
for (int i : ret) cout << i << '\n';
}
범위 안에 있는 요소 중 앞에서부터 서로를 비교해가며 중복되는 요소를 제거하고
나머지 요소들은 삭제하지 않고 그대로 두는 함수
vector<int> v;
int main () {
for(int i = 1; i <= 5; i++){
v.push_back(i);
v.push_back(i);
}
for(int i : v) cout << i << " "; // 1 1 2 2 3 3 4 4 5 5
cout << '\n';
// 중복되지 않은 요소로 채운 후, 그 다음 이터레이터를 반환한다.
auto it = unique(v.begin(), v.end()); // 5
cout << it - v.begin() << '\n';
// 앞에서 부터 중복되지 않게 채운 후 나머지 요소들은 그대로 둔다.
for(int i : v) cout << i << " "; // 1 2 3 4 5 3 4 4 5 5
cout << '\n';
return 0;
}
vector<int> v {1, 1, 2, 2, 3, 3, 5, 6, 7, 8, 9};
int main () {
auto it = unique(v.begin(), v.end());
for(int i : v) cout << i << " "; // 1 2 3 5 6 7 8 9 7 8 9
cout << '\n';
return 0;
}
앞의 경우처럼 앞에서부터 서로를 비교해가며 중복된 요소를 제거하기 때문에
sort()
, erase(unique())
를 함께 써야 중복된 수를 제거한 배열이 나오게 됩니다.
vector<int> v {2, 2, 1, 1, 2, 3, 3, 4, 5, 6, 7, 8};
int main() {
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
for(int i : v) cout << i << " "; // 1, 2, 3, 4, 5, 6, 7, 8, 9
cout << '\n';
return 0;
}