1 Star 0 Fork 0

huyi / TechCPP

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
STL中,map的底层是如何实现的?.md 1.26 KB
一键复制 编辑 原始数据 按行查看 历史
葛昆仑 提交于 2024-02-10 03:02 . update:10 articles

在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)。

1
https://gitee.com/hylhm/TechCPP.git
git@gitee.com:hylhm/TechCPP.git
hylhm
TechCPP
TechCPP
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891