新闻中心
c++ set容器用法 c++ set去重原理详解
set能自动去重并保持有序,其底层通常采用红黑树实现;插入时通过比较操作查找位置,若元素已存在(即互不小于对方)则插入失败,从而保证唯一性;支持自定义类型需提供比较规则,适用于需要有序且唯一数据的场景。

在C++中,set 是一个非常实用的关联式容器,常用于自动去重和保持元素有序。它属于STL(标准模板库)的一部分,定义在
set的基本用法
set 容器内部存储唯一且按升序排列的元素。默认情况下,使用 operator 进行比较,因此元素必须支持比较操作。
常见操作示例:
- 插入元素:使用 insert() 方法,重复插入相同值不会生效。
- 删除元素:使用 erase(),可传值或迭代器。
- 查找元素:使用 find(),返回迭代器,未找到则返回 end()。
- 判断是否为空:empty()。
- 获取大小:size()。
代码示例:
#include <set>
#include <iostream>
int main() {
std::set<int> s;
s.insert(5);
s.insert(3);
s.insert(5); // 重复,插入无效
for (const auto& x : s) {
std::cout << x << " "; // 输出:3 5
}
if (s.find(3) != s.end()) {
std::cout << "\n3 存在";
}
return 0;
}
set去重的原理
set 能自动去重,根本原因在于其底层数据结构——通常实现为自平衡二叉搜索树(如红黑树)。
当调用 insert 插入元素时,set 会:
- 从根节点开始,按照比较规则(默认小于)查找插入位置。
- 如果发现已有相同值的节点(即 !a
- 此时插入失败,不修改容器,返回已存在节点的迭代器。
由于 set 要求元素“严格弱排序”,而“相等”被定义为:
两个元素 a 和 b 相等,当且仅当 a 且 b 。
这与 == 不同,但能保证唯一性。
自定义类型如何使用set
若要将自定义类型放入 set,必须提供比较方式。
GoEnhance
全能AI视频制作平台:通过GoEnhance AI让视频创作变得比以往任何时候都更简单。
347
查看详情
可以通过重载 操作
符,或传入比较函数对象。
示例:使用 struct 自定义比较
struct Person {
int age;
std::string name;
bool operator<(const Person& other) const {
return age < other.age; // 按年龄排序,自动去重
}
};
std::set<Person> people;
people.insert({25, "Alice"});
people.insert({25, "Bob"}); // 若只比 age,则视为重复
注意:上述例子中,两个 age=25 的 Person 可能被视为相同。若需更精确去重,应在比较逻辑中加入 name 或其他字段。
set与其他容器对比
相比 vector 或 list,set 插入、删除、查找时间复杂度为 O(log n),虽然比哈希表慢,但能保持有序。
如果不需要排序,只想快速去重,可以考虑 unordered_set,它基于哈希表,平均操作为 O(1)。
基本上就这些。set 的去重能力来自其有序结构和插入时的重复检测机制,理解这一点有助于合理选择容器。
以上就是c++++ set容器用法 c++ set去重原理详解的详细内容,更多请关注其它相关文章!
# 解决方法
# 宁波公司建设网站
# 湖北seo外包系统
# 大渡口区的网站推广
# 沧州网站建设 网络服务
# 医院网站建设与维护题库
# 闲鱼怎么测关键词排名
# 小学网站建设及使用
# 前台营销推广协助
# 白城seo查询怎么样
# 黄埔网站建设报价
# 升序
# 红黑
# 但能
# c++ set
# 尼克
# 重写
# 有什么
# 数据结构
# 迭代
# 自定义
# red
# 排列
# stream
# ios
# c++
# ai
# c++去重
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
AO3网页版最新入口合集 Archive of Our Own在线访问指南
ACG动漫视频网入口 ACG动漫*免费正版观看地址
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
小米汽车11月交付量突破40000台!雷军:将继续努力
Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
实现分段式页面滚动导航:CSS与J*aScript教程
深入理解Google Cloud Datastore查询:祖先路径与数据一致性
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化
AO3最新可访问网址 Archive of Our Own官方在线入口
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案
Steam官网入口直达 Steam注册及登录步骤
ArrayList与LinkedList操作复杂度详解:遍历与修改
J*aScript map 方法中处理循环元素为空数组的策略
Archive of Our Own官网直达 AO3最新可用地址一览
怎么在mac上运行html代码_mac运行html代码方法【指南】
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
Tabulator表格日期时间排序问题及自定义解决方案
整合Supabase认证与Django模型:跨模式迁移的解决方案
迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法
TikTok网页版直接登录 TikTok网页端官方平台入口
qq游戏免费畅玩入口_qq游戏电脑版快速启动
J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析
如何在Promise链中有效终止错误处理后的执行
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
《主播少女的秘密账号迷宫》首支宣传片
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
Python Socket多播通信中指定源IP地址的实践指南
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
海棠电脑版入口_通过电脑访问海棠官网阅读
mysql备份恢复性能优化_mysql备份恢复性能优化方法
qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决
PHP中高效并行检查多链接状态的教程


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