对于vector
和list
等C ++ STL容器,查找元素以及插入或删除元素的复杂性是不言自明的。但是,对于map
容器,即使我从阅读中知道访问和插入复杂性/性能是O(log(n)),我也无法解决为什么。我显然不了解我需要的地图,因此非常感谢对此主题的一些启示。
答案 0 :(得分:12)
地图或集合的元素包含在树结构中;每次检查树的节点时,都要确定要尝试查找/插入的元素是否小于或大于节点。您需要执行此操作的次数(对于正确平衡的树)是log2(N),因为每次比较都会抛出一半的可能性。
答案 1 :(得分:1)
正如slavik262指出的那样,地图通常采用红黑树实现,这些树是自我平衡的。 例如在wikipedia中检查红黑树的复杂性 我不知道任何带有二叉树的地图的实现;如果Mark Ransom知道一个,我很高兴知道哪一个。