为什么C ++地图不是作为尝试实现的?

时间:2012-01-20 09:50:54

标签: c++ algorithm data-structures map trie

尝试是非常快速的数据结构。查找单词需要O(sizeofword)时间,而std::map s是自我balacing树。为什么不使用try实现标准C ++映射模板。有什么具体原因吗?是否有使用trie而不是自平衡树的权衡?

1 个答案:

答案 0 :(得分:24)

只有当要存储的密钥可以逐位或逐字符处理时,才能使用

Tries。 C ++ std::mapstd::set旨在与任何可比较的元素一起使用,因此无法以逐字符处理键的方式实现。它们(通常)使用平衡的二叉搜索树,它不需要对键进行内省,而只需使用比较器进行快速查找。

如果您确定某些属性适用于您的密钥,则在某些情况下甚至可以比尝试更好(请参阅van Emde Boas tree示例)。但是,库设计人员必须设计很多用例,因此可能需要选择比绝对最佳选项慢的选项,因为他们需要处理尽可能多的选项。

此外,符合标准的C ++实现实际上很可能包含std::mapstd::set的特化,当键是字符串时使用trie。我不相信任何做法,但理论上可行。

希望这有帮助!