新闻中心
c++如何使用std::unique去除重复元素_c++容器去重操作指南
std::unique用于去除相邻重复元素,需配合sort和erase使用以实现全量去重,并支持自定义谓词比较,正确用法为vec.erase(std::unique(vec.begin(), vec.end()), vec.end())。

在C++中,std::unique 是一个常用的算法函数,用于去除容器中相邻的重复元素。它定义在 gorithm> 头文件中,常与 std::vector、std::string 或其他序列容器配合使用。需要注意的是,std::unique 并不会自动对数据排序或删除所有重复项,只去除连续重复的部分。因此,在使用前通常需要先排序。
1. std::unique 的基本用法
std::unique 会将相邻的重复元素“前移”,并返回一个指向新逻辑结尾的迭代器。实际的元素并未从容器中删除,需要手动调用容器的 erase() 方法来真正删除多余元素。
基本语法如下:
auto new_end = std::unique(vec.begin(), vec.end());
vec.erase(new_end, vec.end());
示例代码:
#include iostream>#include
#include
int main() {
std::vector
// 去除相邻重复元素
auto it = std::unique(vec.begin(), vec.end());
vec.erase(it, vec.end());
for (int n : vec) {
std::cout }
// 输出: 1 2 3 4
return 0;
}
2. 去除未排序容器中的所有重复元素
如果原始数据是无序的,比如 {3, 1, 2, 1, 3},直接使用 std::unique 无法去重,因为重复元素不相邻。正确的做法是:先排序,再使用 unique。
步骤:
- 使用 std::sort 对容器排序
- 调用 std::unique 去除相邻重复项
- 用 erase 删除多余元素
示例:
Pinokio
Pinokio是一款开源的AI浏览器,可以安装运行各种AI模型和应用
232
查看详情
#include #include
#include
int main() {
std::vector
// 先排序
std::sort(vec.begin(), vec.end());
// 再去重
vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
for (int n : vec) {
std::cout }
// 输出: 1 2 3
return 0;
}
3. 自定义去重条件(使用谓词)
std::unique 支持传入自定义比较函数(谓词),用于定义“什么是重复”。例如,去除绝对值相同的相邻数。
示例:去除绝对值重复的相邻元素
#include#include
#include
bool abs_equal(int a, int b) {
return std::abs(a) == std::abs(b);
}
int main() {
std::vector
std::sort(vec.begin(), vec.end(), [](int a, int b) {
return std::abs(a) }); // 按绝对值排序
auto it = std::unique(vec.begin(), vec.end(), abs_equal);
vec.erase(it, vec.end());
for (int n : vec) {
std::cout }
// 可能输出: -1 -2 -3 4 (具体取决于排序稳定性)
return 0;
}
4. 注意事项与常见误区
std::unique 不改变容器大小,只是移动元素。必须配合 erase 才能真正释放空间。
常见错误写法:
std::unique(vec.begin(), vec.end()); // 忘记 erase,数据仍存在正确写法:
vec.erase(std::unique(vec.begin(), vec.end()), vec.end());对于 std::set 或 std::unordered_set,它们本身不允许重复,插入时自动去重,适合不需要保持顺序或频繁查询的场景。
基本上就这些。掌握排序 + unique + erase 的组合,就能高效完成大多数去重任务。
以上就是c++++如何使用std::unique去除重复元素_c++容器去重操作指南的详细内容,更多请关注其它相关文章!
# 管理机制
# 汕头市企业网站推广代理
# 禅城培训机构网站建设
# 信息化seo优化活动
# 宠物美食的营销推广
# 杨凌网站建设推广
# 宜城房地产网站建设
# seo诊断步骤
# 网站推广外包怎么收费
# 品牌网站推广方案设计
# 东莞长安营销推广公司
# 的是
# 复用
# 多路
# go
# 如何实现
# 何为
# 操作指南
# 如何使用
# 都是
# 自定义
# red
# 数据排序
# stream
# ios
# c++
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
构建轻量级网站内部消息系统:Formspree 集成指南
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】
Linux如何构建多环境配置管理_Linux多环境配置方案
PostgreSQL海量数据高效导入策略:Python与Django实践指南
Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性
知音漫客官网漫画下载_知音漫客网页版阅读记录
单射、满射与双射的关系 一文理清所有逻辑
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
在Socket.IO连接中实现Access Token自动更新与动态重连
如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!
css绝对定位元素脱离父容器怎么办_确保父元素position非static
在Typer应用中优雅地处理和重组任意命令行参数
Composer如何在生产环境安全地执行composer update
百度网盘网页版入口 百度网盘网页版官方登录网址
优化HTML表单样式:解决输入框焦点跳动与元素间距问题
汽水音乐在线版入口_汽水音乐网页播放手册
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
解决 MongoDB 聚合查询中对象数组 _id 匹配问题
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
蛙漫2台版漫画地址 Manwa2正版网页版链接
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
Tabulator表格中精确实现日期时间排序的指南
C++ explicit关键字防止隐式转换_C++构造函数安全规范
Spyder启动失败:字体文件权限拒绝错误解决方案
J*aScript中管理异步API调用:确保操作顺序与数据一致性
微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法
高德地图沿途添加点失败如何解决 高德多点规划方法
黑猫投诉统一入口官网 消费者权益保护投诉平台
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
深入理解J*a链表中的IPosition接口与使用
word中如何让数字纵向排列_Word数字纵向排列方法
QQ官网正版登录链接 QQ在线登录入口最新
如何仅使用CSS更改登录界面背景图像图标的颜色
在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
利用Bokeh CustomJS动态控制DataTable列可见性
Python类型检查:优化关联可选属性的Mypy推断策略
J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明
12306几点到几点不能订票? | 官方最新系统维护时间全解析
快手网页版在线登录 快手网页版官网入口快速访问
新三国志曹操传110级星符试炼夏侯渊极难攻略
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问
Yandex免登录网页版地址 Yandex搜索引擎官方访问入口
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException


2025-10-30
浏览次数:次
返回列表