std::set 和 std::map 有什么区别

What is the difference between std::set and std::map

本文关键字:std 什么 区别 set map      更新时间:2023-10-16

我对 c++ 编程相对较新,想知道是否有人可以帮助我澄清几个问题。

http://www.cplusplus.com/reference/set/set/

http://www.cplusplus.com/reference/map/map/

我一直在阅读如何实现 STL 二叉搜索树,我一直注意到 std::set 和 std::map 经常被提及为完成此类任务的方法。然而,两者之间究竟有什么区别?对我来说,两者看起来几乎相同,我不确定是否有一些我没有注意到的东西使一个在特定任务中比另一个更好。使用 std::set 而不是 std::map 来实现从数组或向量中获取值的 STL 二叉搜索树(例如速度)有什么优势吗?

如果有人能帮助我理解这个概念,我将不胜感激!

std::setstd::map都是associative containers。不同之处在于std::sets只包含密钥,
而在std::map中有一个关联的值,即如果A -> B,则map[A]=B,这类似于hashing但不是O(1),而是O(log N)

您可以进一步查看unordered_map在O(1)时间内提供操作。

std::set将数据保持排序格式。
两者的实现都是由平衡树(如AVL或红黑树)完成的,O(logN)时间复杂度。

但需要注意的重要一点是 两者都可以存储唯一值 .要克服这一点,您还必须看到 多映射 和 多集 .

希望这有帮助!

更新:在红黑树的情况下,重新平衡旋转是一个O(1)操作,而对于AVL,这是一个O(log n)操作,使红黑树在重新平衡阶段的这一方面更有效率,也是它更常用的可能原因之一。