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

在C++中,若想创建一个只包含唯一元素的 vector,或对已有 vector 去除重复元素,最常用的方法是结合 排序 和 std::unique 算法。下面详细介绍实现方式。
使用 std::sort 和 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 辅助判断是否已存在。

降重鸟
113
要想效果好,就用降重鸟。AI改写智能降低AIGC率和重复率。
113
查看详情
示例代码:
#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;
}
直接创建不含重复元素的 vector
可以在插入时就检查是否已存在,适用于边构建边去重的场景。
立即学习“C++免费学习笔记(深入)”;
例如:
- 每次插入前用
std::find查找(适合小数据) - 或配合
std::set/std::unordered_set实时判重
基本上就这些常用方法。根据是否允许排序、性能要求和数据规模选择合适方案即可。标准做法是排序+unique,效率高且代码简洁。
相关标签:
c++ go ai ios stream red sort 算法
大家都在看:
c++中模板(template)的基本用法_c++模板编程基础教程
c++中如何将string转换为int_c++字符串转整数的常用实现方式
c++中如何将一个自定义对象存入set_c++ set存储自定义类型的比较规则实现
C++如何使用std::variant存储不同类型的值_C++ std::variant使用方法
c++中vector怎么初始化_c++中vector初始化方法详解
c++中如何将string转换为int_c++字符串转整数的常用实现方式
c++中如何将一个自定义对象存入set_c++ set存储自定义类型的比较规则实现
C++如何使用std::variant存储不同类型的值_C++ std::variant使用方法
c++中vector怎么初始化_c++中vector初始化方法详解
本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END

































暂无评论内容