新闻中心
C++如何使用set和unordered_set_C++集合容器区别与用法示例
set基于红黑树实现,元素有序,操作复杂度O(log n);unordered_set基于哈希表,无序但平均O(1),需根据是否需要排序选择。

在C++中,set 和 unordered_set 都是标准模板库(STL)提供的关联容器,用于存储唯一的元素。它们的核心功能相似,但在底层实现、性能特征和使用场景上有明显区别。
set 与 unordered_set 的主要区别
set 基于红黑树(一种自平衡二叉搜索树)实现,元素自动按升序排列。插入、删除和查找的时间复杂度为 O(log n)。
unordered_set 基于哈希表实现,元素无固定顺序。理想情况下插入、删除和查找操作接近 O(1),最坏情况可能退化到 O(n)。
选择依据:
- 需要有序遍历 → 使用 set
- 追求最快平均查找速度且不需要排序 → 使用 unordered_set
- 自定义类型需提供比较函数(set)或哈希函数(unordered_set)
set 使用示例
set 会自动对元素进行排序,并保证唯一性。
Reachout.ai
一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造
142
查看详情
#include iostream>#include
using namespace std;
int main() {
set
s.insert(5);
s.insert(1);
s.insert(3);
s.insert(5); // 重复元素不会被插入
cout for (int x : s) {
cout }
cout
if (s.find(3) != s.end()) {
cout }
s.erase(1);
cout for (int x : s) cout cou
t return 0;
}
unordered_set 使用示例
unordered_set 不保证顺序,但通常具有更快的访问速度。
#include#include
using namespace std;
int main() {
unordered_set
us.insert(5);
us.insert(1);
us.insert(3);
us.insert(5); // 重复,不插入
cout for (int x : us) {
cout }
cout
if (us.count(3)) {
cout }
us.erase(1);
cout
return 0;
}
自定义类型的支持
若要在 set 中使用自定义类型,需提供比较函数;对于 unordered_set,需提供哈希函数。
例如定义一个结构体 Person:
struct Person {string name;
int age;
bool operator==(const Person& p) const {
return name == p.name && age == p.age;
}
};
// set 需要小于比较
struct ComparePerson {
bool operator()(const Person& a, const Person& b) const {
if (a.name != b.name) return a.name return a.age }
};
// unordered_set 需要哈希特化
struct HashPerson {
size_t operator()(const Person& p) const {
return hash
};
// 使用方式:
set
unordered_set
以上就是C++如何使用set和unordered_set_C++集合容器区别与用法示例的详细内容,更多请关注其它相关文章!
# 边缘
# 云推网站seo优化
# 汕头实体店推广招聘网站
# 溧水区网站优化外包公司
# 学院网站建设 需求分析
# 深圳网站优化设计高中
# 新沂徐州网站建设推广
# 寻甸营销推广售后服务
# seo网站优化的步骤和技巧
# 绥化seo是什么方案
# 锦州网站优化排名软件
# 遍历
# 不需要
# 升序
# ai
# 特化
# 红黑
# 都是
# 如何使用
# 自定义
# 游戏开发
# red
# 排列
# 区别
# stream
# ios
# c++
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
J*aScript对象创建方式_J*aScript设计模式应用
Lar*el Form Request中唯一性验证在更新操作中的正确实现
蛙漫2台版漫画地址 Manwa2正版网页版链接
c++中的std::basic_string的SSO优化_c++短字符串优化深度解析
解决Python logging 中 datefmt 导致时间戳固定不变的问题
微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
J*aScript中在Map循环中检测并处理空数组元素
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南
Yandex浏览器官方网页版入口 Yandex浏览器最新版官网
如何使 Jest 模拟函数默认抛出错误以提高测试效率
PostgreSQL海量数据高效导入策略:Python与Django实践指南
c++如何使用chrono库处理时间_c++标准库时间与日期操作
c++ 获取系统当前时间 c++时间戳获取方法
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置
生成rdflib自定义SPARQL函数:参数匹配与实践指南
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
微信网页版扫码登录入口 微信网页版二维码登录入口
Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南
新手怎么开始学化妆 零基础化妆入门教程
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
深入理解Promise链:如何在catch后中断then的执行
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
痛风发作了怎么办? 快速止痛和后期饮食调理
如何有效阻止外部脚本意外修改内联样式的高度属性
小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍
解决Tabulator日期时间排序问题的专业指南
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
Animex动漫社网入口地址 Animex动漫社网正版在线入口
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
Shopware订单对象中获取产品自定义字段的正确方法
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
Win11怎么开启高性能模式_Windows 11电源计划优化设置
mc.js官网登录入口 mc.js官方登录入口最新版
wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
mcjs网页版流畅运行 mcjs低配电脑畅玩入口


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