新闻中心

c++如何使用std::unique去除重复元素_c++容器去重操作指南

2025-10-30
浏览次数:
返回列表
std::unique用于去除相邻重复元素,需配合sort和erase使用以实现全量去重,并支持自定义谓词比较,正确用法为vec.erase(std::unique(vec.begin(), vec.end()), vec.end())。

c++如何使用std::unique去除重复元素_c++容器去重操作指南

在C++中,std::unique 是一个常用的算法函数,用于去除容器中相邻的重复元素。它定义在 gorithm> 头文件中,常与 std::vectorstd::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 vec = {1, 2, 2, 3, 3, 3, 4};
    // 去除相邻重复元素
    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

Pinokio是一款开源的AI浏览器,可以安装运行各种AI模型和应用

Pinokio 232 查看详情 Pinokio #include stream>
#include
#include

int main() {
    std::vector vec = {3, 1, 2, 1, 3};
    // 先排序
    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 vec = {1, -1, 2, 2, -3, 3, 4};
    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::setstd::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 

搜索