Skip to content

Latest commit

 

History

History
15 lines (10 loc) · 1.26 KB

STL中,map的底层是如何实现的?.md

File metadata and controls

15 lines (10 loc) · 1.26 KB

在C++标准模板库(STL)中,map 是一种关联容器,它以键值对的方式存储元素,其中每个键都是唯一的。底层实现通常使用红黑树(Red-Black Tree),这是一种自平衡的二叉搜索树。

红黑树保持了树的平衡性,即从根到所有叶子节点的最长路径不会超过最短路径的两倍。这种性质确保了map中的操作(如插入、删除和查找)可以在对数时间复杂度O(log n)内完成。

红黑树有以下特性:

  1. 每个节点要么是红色,要么是黑色。
  2. 根节点是黑色。
  3. 所有叶子节点(NIL节点,空节点)都是黑色。
  4. 每个红色节点必须有两个黑色的子节点(不能有两个连续的红色节点)。
  5. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

因为map的底层是红黑树这种高度平衡的数据结构,所以它能够提供良好的性能保证,使得即使在大量元素存储的情况下也能保持效率。

需要注意的是,在C++11后,还引入了unordered_map,它使用哈希表作为底层实现,提供平均常数时间复杂度O(1)的访问性能,但它不保证元素的顺序,并且在最坏情况下可能退化为线性时间复杂度O(n)。