std::set存储单一去重排序的键,仅支持按值查找;std::map存储键值对,键去重排序,仅支持按键查找。二者均基于红黑树,操作复杂度O(log n),迭代器双向。

std::set 存的是单一值,自动去重并排序;std::map 存的是“键-值对”,用键查值,键自动去重并排序,值可重复。
set 是“只存 key”的容器,比如你只想维护一组不重复的整数:{2, 5, 1, 8},插入后自动变成 {1, 2, 5, 8},不能通过下标访问,只能用迭代器遍历或 find 查某个值是否存在。
map 则是“key → value”的映射,比如用学号(int)查姓名(string):{ {1001,"张三"}, {1002,"李四"} }。你只能用 key 查 value(如 m[1001] 或 m.find(1001)),不能用 value 反查 key。
两者默认都基于红黑树实现,所以:
• 插入、删除、查找都是 O(log n)
• 元素按 key 严格升序排列(自定义比较器可改)
• 迭代器是双向的,不支持随机访问
• 内存开销略大于 vector,但远小于哈希容器
如果不需要排序,只追求平均 O(1) 查找,且 key 可哈希(如 int、string),优先考虑:
• unordered_set 替代 set
• unordered_map 替代 map
注意:它们不保证顺序,遍历时顺序不确定,且哈希冲突可能退化性能。
立即学习“C++免费学习笔记(深入)”;
基本上就这些。选对容器不靠死记,看清楚“我要存什么”“我怎么访问它”“要不要顺序”三个问题,答案自然就出来了。
以上就是C++中的std::set和std::map有什么区别?C++关联容器选择指南【STL】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号