为什么 C++ STL 映射容器的复杂性为 O(log(n))

Why is the complexity of the C++ STL map container O(log(n))?

本文关键字:log 复杂性 STL C++ 映射 为什么      更新时间:2023-10-16

对于C++ STL 容器(如 vectorlist),查找元素和插入或删除元素的复杂性是不言自明的。但是,对于map容器,即使我从阅读中知道访问和插入的复杂性/性能为 O(log(n)),我也无法弄清楚原因。我显然没有像我需要的那样了解地图,因此非常感谢有关此主题的一些启发。

映射或集合的元素包含在树结构中;每次检查树的节点时,您都会确定要查找/插入的元素是小于还是大于节点。您需要执行此操作的次数(对于适当平衡的树)是 log2(N),因为每次比较都会抛出一半的可能性。

作为 slavik262 点,地图通常使用红黑树来实现,它们是自平衡的。例如在维基百科中检查红黑树的复杂性我不知道带有二叉树的地图的任何实现;如果马克·兰塞姆知道一个,我会很高兴知道是哪一个。