尝试是非常快速的数据结构。查找单词需要O(sizeofword)时间,而std::map
s是自我balacing树。为什么不使用try实现标准C ++映射模板。有什么具体原因吗?是否有使用trie而不是自平衡树的权衡?
答案 0 :(得分:24)
Tries。 C ++ std::map
和std::set
旨在与任何可比较的元素一起使用,因此无法以逐字符处理键的方式实现。它们(通常)使用平衡的二叉搜索树,它不需要对键进行内省,而只需使用比较器进行快速查找。
如果您确定某些属性适用于您的密钥,则在某些情况下甚至可以比尝试更好(请参阅van Emde Boas tree示例)。但是,库设计人员必须设计很多用例,因此可能需要选择比绝对最佳选项慢的选项,因为他们需要处理尽可能多的选项。
此外,符合标准的C ++实现实际上很可能包含std::map
或std::set
的特化,当键是字符串时使用trie。我不相信任何做法,但理论上可行。
希望这有帮助!