std::vector 去重
时间: 2023-10-20 10:35:11 浏览: 168
你可以使用 std::unique 和 std::erase 结合来去除 std::vector 中的重复元素。下面是一个示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec {1, 2, 2, 3, 4, 4, 5};
// 对 vector 进行排序
std::sort(vec.begin(), vec.end());
// 使用 std::unique 去除相邻重复元素
auto last = std::unique(vec.begin(), vec.end());
// 使用 std::erase 删除重复元素后的冗余部分
vec.erase(last, vec.end());
// 打印去重后的 vector
for (const auto& element : vec) {
std::cout << element << " ";
}
return 0;
}
```
该代码首先对 vector 进行排序,然后使用 std::unique 去除相邻的重复元素。接着,使用 std::erase 删除重复元素后的冗余部分。最后,遍历打印去重后的 vector。输出结果为:1 2 3 4 5。
相关问题
std::vector 合并 去重
要使用std::vector合并并去重,可以使用insert()函数将多个vector插入到一个vector中,然后使用sort()函数进行排序,最后使用unique()函数和erase()函数删除重复项。以下是一个示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> a{ 1,3,5,7,9 };
vector<int> b{ 0,4,8,2,5 };
vector<int> c{ 1,6,7,3,8 };
vector<int> merged;
merged.insert(merged.end(), a.begin(), a.end()); // 将a插入merged
merged.insert(merged.end(), b.begin(), b.end()); // 将b插入merged
merged.insert(merged.end(), c.begin(), c.end()); // 将c插入merged
sort(merged.begin(), merged.end()); // 对merged进行升序排序
vector<int>::iterator iter = unique(merged.begin(), merged.end()); // 查找并删除重复项
merged.erase(iter, merged.end());
cout << "合并并删除重复项后的size = " << merged.size() << endl;
if (merged.size() > 0) {
cout << "分别为:" << endl;
for (int i = 0; i < merged.size(); i++) {
cout << merged[i << endl;
}
}
return 0;
}
```
输出结果为:
```
合并并删除重复项后的size = 11
分别为:
0
1
2
3
4
5
6
7
8
9
```<em>1</em><em>2</em><em>3</em>
#### 引用[.reference_title]
- *1* [C++ vector数据合并&&去除重复项](https://blog.csdn.net/Gary_ghw/article/details/125633718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item]
- *2* [C++ 给vector去重的三种方法](https://blog.csdn.net/u011089523/article/details/110122568)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item]
- *3* [c++ STL顺序容器vector/关联容器map的合并](https://blog.csdn.net/appleskyaaaa/article/details/119078701)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item]
[ .reference_list ]
std::vector 去除另一个 std::vector 子集
要去除另一个 std::vector 的子集,可以使用 STL 中的 std::remove_if 算法结合 lambda 表达式来实现。具体步骤如下:
1. 使用 std::sort 对两个 vector 进行排序。
2. 使用 std::unique 对两个 vector 去重。
3. 使用 std::remove_if 结合 lambda 表达式,删除子集中的元素。
4. 使用 std::vector 的 erase 方法删除被删除的元素。
以下是示例代码:
```
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec1 { 1, 2, 3, 4, 5, 6, 7 };
std::vector<int> vec2 { 2, 4, 6 };
// 排序并去重
std::sort(vec1.begin(), vec1.end());
std::sort(vec2.begin(), vec2.end());
vec1.erase(std::unique(vec1.begin(), vec1.end()), vec1.end());
vec2.erase(std::unique(vec2.begin(), vec2.end()), vec2.end());
// 删除子集中的元素
auto it = std::remove_if(vec1.begin(), vec1.end(), [&vec2](int i) {
return std::binary_search(vec2.begin(), vec2.end(), i);
});
vec1.erase(it, vec1.end());
// 输出结果
for (int i : vec1) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
阅读全文