C++ set与unordered_set使用详解
作者:WeekendFlower
时间:2026-01-10
来源:互联网
浏览:0
set基于红黑树实现,元素有序,操作复杂度O(logn);unordered_set基于哈希表,元素无序,平均操作复杂度O(1),适用于存在性查询。
set基于红黑树实现,元素有序,操作复杂度O(log n);unordered_set基于哈希表,元素无序,平均操作复杂度O(1),适用于存在性查询。

在C++中,set 和 unordered_set 是两种常用的关联式容器,用于存储唯一的元素。它们都定义在
set 的使用方法
set 基于红黑树实现,元素自动排序(默认升序),插入、删除、查找的时间复杂度为 O(log n)。适合需要有序遍历或范围查询的场景。
基本操作示例:
- 包含头文件:#include
- 创建 set 并插入元素:
s.insert(10);
s.insert(5);
s.insert(15);
s.insert(5); // 重复元素不会被插入
此时 set 中元素为 {5, 10, 15},已自动排序。
- 遍历输出:
cout << x << " ";
}
// 输出:5 10 15
- 查找元素:
cout << "Found 10";
}
- 删除元素: s.erase(10); // 删除值为10的元素
- 自定义排序(例如降序):
- 包含头文件:#include
- 创建 unordered_set 并插入:
- 查找元素:
- 删除元素:
- 遍历输出(顺序不固定):
- 可以指定桶数或自定义哈希函数(高级用法):
- 需要元素有序或进行范围操作(如找前驱后继)→ 使用 set
- 只关心元素是否存在、插入/查找效率优先 → 使用 unordered_set
- 数据量大且哈希分布均匀时,unordered_set 更快
- 注意:unordered_set 可能因哈希冲突导致性能下降,set 性能更稳定
s_desc.insert(5);
s_desc.insert(10);
// 元素顺序:10, 5
unordered_set 的使用方法
unordered_set 基于哈希表实现,元素无序,插入、删除、查找平均时间复杂度为 O(1),最坏情况 O(n)。适合只关心存在性而不关心顺序的场景。
基本操作示例:
us.insert(10);
us.insert(5);
us.insert(15);
元素顺序不确定,可能是任意排列。
cout << "5 exists";
}
cout << x << " ";
}
struct HashPair {
size_t operator()(const pair
return hash
}
};
unordered_set
set 与 unordered_set 的选择建议
根据实际需求选择:
作者最新文章
赤友清理大师
2026-09-16 17:43
南邮光擎智算团队:GaN基Micro-LED光计算芯片从理论到流片的突破
2026-09-08 18:35
多张照片怎么合成PDF文件?三种图片转PDF工具怎么选?
2026-09-03 17:04
Excel转PDF防乱版指南:在线与本地双方案及排版检查
2026-09-03 10:04
多个PDF怎么合并成一个?合并后顺序怎么检查?
2026-09-02 19:54
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















