c++中的std::unique和std::sort如何配合去重_c++用unique和sort实现容器去重


先排序使相同元素相邻,再用std::unique移动重复元素并返回新末尾,最后调用erase删除冗余元素,实现容器去重。

c++中的std::unique和std::sort如何配合去重_c++用unique和sort实现容器去重

在C++中,std::uniquestd::sort 常被配合使用来实现容器去重。需要注意的是,std::unique 只能去除连续重复的元素,因此必须先排序,才能确保所有重复元素相邻,从而被正确移除。

1. 去重的基本流程

要对一个容器(如 vector)去重,步骤如下:

  • 使用 std::sort 将容器中的元素排序,使相同值的元素相邻
  • 使用 std::unique 将连续重复的元素“前移”,并返回一个指向唯一元素末尾的迭代器
  • 调用容器的 erase 方法,删除从该迭代器到末尾的所有元素

2. 实际代码示例

以下是一个使用 vector 去重的完整例子:

#include <algorithm>
#include <vector>
#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;
}

3. 注意事项

std::unique 不会改变容器大小,它只是把不重复的元素移到前面,并返回新逻辑末尾的位置。必须手动 erase 才能真正缩短容器。

AI建筑知识问答 AI建筑知识问答

用人工智能ChatGPT帮你解答所有建筑问题

AI建筑知识问答 172 查看详情 AI建筑知识问答

如果容器原本是有序的,可以跳过 sort;但大多数情况下无序数据都需要先排序。

对于自定义类型,只要提供合适的比较函数,也可以使用这种方式去重。例如:

struct Person {
    int age;
    std::string name;
};

// 自定义比较函数(按年龄去重)
bool cmp(const Person& a, const Person& b) {
    return a.age < b.age;
}

std::sort(vec.begin(), vec.end(), cmp);
auto it = std::unique(vec.begin(), vec.end(), 
    [](const Person& a, const Person& b) {
        return a.age == b.age;
    });
vec.erase(it, vec.end());
基本上就这些。关键点是:先排序,再 unique,最后 erase。这样才能安全有效地完成去重。

以上就是c++++中的std::unique和std::sort如何配合去重_c++用unique和sort实现容器去重的详细内容,更多请关注其它相关文章!


# 多路  # seo优化人员怎么考核  # 冻干食品项目营销推广  # 闵行区推广网站要求  # 济南seo外链资源  # seo人员的职责  # 中山seo推广哪家有名  # 运营销售推广哪个好  # 掌阅营销推广方式选择  # 安康网络seo推广  # 清远网站建设步骤  # 的是  # 复用  # go  # 管理机制  # 如何实现  # 何为  # 移到  # 自定义  # 知识问答  # 都是  # stream  # ios  # c++  # ai 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 抖音团长模式怎么做?团长模式是什么意思?  Go Template中优雅处理循环最后一项:自定义函数实践  全球各国上班时间表外贸邮件时间  mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  邦丰播放器频道搜索设置  西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  VS Code如何设置默认配置  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  解决Flex容器横向滚动内容截断与偏移问题  PHP utf8_encode 字符编码转换陷阱与解决方案  抖音评论无法发送如何修复 抖音评论功能操作指南  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  《顺丰同城骑士》查看我的技能方法  poki官网最新入口 poki小游戏大全入口  Win11怎么开启HDR_Windows 11显示器画质增强设置  win11如何诊断DirectX问题 Win11运行dxdiag工具排查显卡故障【排错】  《环球网校》设置报考省市方法  抖音号已注销怎么解绑企业认证?不解绑企业认证会怎样?  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  Pandas中基于动态偏移量实现DataFrame列值位移的策略  纯CSS实现自适应宽度与响应式布局的水平按钮组  Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践  《小宇宙》标记不友善评论方法  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航  如何在解析前预检查XML文件的完整性? 比如检查文件大小或特定结束标签  4399造梦西游3无敌版_4399游戏入口  原子笔记app误删找回教程  windows10怎么开启卓越性能_windows10电源选项代码激活  Win10共享文件夹设置方法 Win10局域网文件共享全攻略【教程】  鲨鱼剧场app金币获取方法  《广发易淘金》国债逆回购操作教程  《书耽》更换手机号方法  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  如何查找哪个composer包引入了特定的依赖?  谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  基于键值条件高效映射 Pandas DataFrame 多列数据  键盘保修需要什么_键盘售后维修流程  《i莞家》修改昵称方法  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  如何用mysql实现客户反馈管理_mysql客户反馈数据库方法  PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素  《全民k歌》网页版最新登录入口一览  在React中正确处理HTML input type="number"的数值类型  《密马》发布账号方法  QQ邮箱手机版网页版 QQ邮箱登录入口地址  126邮箱申请入口官网_126邮箱注册免费登录2025  优酷官网登录入口电脑版 优酷官网网址入口 

 2025-10-25

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.