STL::MAP在C++中的内部实现

Internal Implementation of STL::MAP in C++

本文关键字:内部 实现 C++ MAP STL      更新时间:2023-10-16

我想知道,MAP在C++中是如何可用的,而不是MultiMap只是内部实现的简单Map。

我最能想到的是:

对于整数映射:A Balanced Binary Search Tree could be used .

对于字符串映射:Compressed Trie or something similar could be used .

我真的很好奇,它是如何在STL映射中真正实现的是否使用了某种散列函数,或者它与此完全不同。

包括std::map在内的有序容器被实现为平衡二叉树(通常是RB树,但任何其他平衡树都符合要求)。

对于这类问题,您需要的最重要的信息是容器中每个操作的复杂性要求,这也是标准要求的。也就是说,最重要的答案是,只要满足复杂性要求,实际实现并不重要。

c++中的

std::map是使用红黑树实现的。

在内部,类"map"公开继承了"__Tree"类,该类提供了红黑树的实现。请参阅<map.h>

这个__Tree类用于map/multimap/set/multiset。请参阅<xtree.h>

std::map基于平衡二进制搜索树,例如AVL树和红黑树(log(n))。在插入关键字的过程中,在平衡二进制搜索树中进行比较,以找到关键字的正确位置。由于树是平衡的,在插入过程中进行的最大比较将是树的最大高度,即O(log(n))

std::unordereded_map基于哈希表。搜索元素的平均情况复杂度为O(1),但最坏情况复杂度仍然为O(n)