使用std::sort和std::unique可高效去除vector中重复元素,先排序使重复元素相邻,再用std::unique移除相邻重复值并擦除尾部;若需保持原始顺序,则利用std::unordered_set记录已见元素,遍历原vector时仅保留首次出现的元素。

在C++中,若想创建一个只包含唯一元素的 vector,或对已有 vector 去除重复元素,最常用的方法是结合 排序 和 std::unique 算法。下面详细介绍实现方式。
这是最高效且标准的做法。注意:std::unique 只能移除**相邻**的重复元素,因此必须先排序。
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> vec = {5, 2, 8, 2, 1, 5, 3};
// 步骤1:排序
std::sort(vec.begin(), vec.end());
// 步骤2:去重(将唯一元素移到前面)
auto it = std::unique(vec.begin(), vec.end());
// 步骤3:删除重复部分
vec.erase(it, vec.end());
// 输出结果:1 2 3 5 8
for (int n : vec) {
std::cout << n << " ";
}
return 0;
}
如果需要保留元素的原始顺序(不去排序),可以使用 std::unordered_set 辅助判断是否已存在。
#include <vector>
#include <unordered_set>
#include <iostream>
int main() {
std::vector<int> vec = {5, 2, 8, 2, 1, 5, 3};
std::vector<int> unique_vec;
std::unordered_set<int> seen;
for (int item : vec) {
// 如果未出现过,加入新vector并标记
if (seen.find(item) == seen.end()) {
seen.insert(item);
unique_vec.push_back(item);
}
}
// 输出:5 2 8 1 3
for (int n : unique_vec) {
std::cout << n << " ";
}
return 0;
}
可以在插入时就检查是否已存在,适用于边构建边去重的场景。
立即学习“C++免费学习笔记(深入)”;
例如:
std::find 查找(适合小数据)std::set / std::unordered_set 实时判重基本上就这些常用方法。根据是否允许排序、性能要求和数据规模选择合适方案即可。标准做法是排序+unique,效率高且代码简洁。
以上就是c++++中如何创建一个只包含唯一元素的vector_c++去重vector中重复元素的方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号