【发布时间】:2012-09-18 05:10:47
【问题描述】:
像 HashMap 这样的数据结构会根据键的相等性来检索数据。
如果我想根据比较结果检索数据,我应该使用什么数据结构?
【问题讨论】:
标签: performance data-structures language-agnostic hashmap
像 HashMap 这样的数据结构会根据键的相等性来检索数据。
如果我想根据比较结果检索数据,我应该使用什么数据结构?
【问题讨论】:
标签: performance data-structures language-agnostic hashmap
通常,您应该使用平衡二叉树。在 C++ 中,您可以通过 std::map 获得一份。在 Java 中,它被称为 TreeMap。遗憾的是,Python 在标准库中没有任何内容。
对于不寻常的情况,其他结构,例如展开树甚至简单的链表可能会更好。这取决于您的需求。
【讨论】:
正如已经回答的那样,平衡树是好的。
不过,您没有提及任何有关插入速度或内存要求的信息。排序后的数组搜索速度也很快(二分搜索),但插入速度很慢。
我假设正在谈论使用字符串进行索引。最快的查找是字典(在我的基准测试中,是 C++ 映射的两倍),但它的存储量很大。
对于字典,每个节点都有一个指针数组(指向节点):每个可能的字符串字符都有一个指针。要插入,您遍历字符串中的每个字符,并为该字符添加一个节点(如果尚不存在),遍历该节点并继续,直到您位于字符串的末尾。然后,您将数据存储在该节点上。这个数据结构还有一个额外的好处,就是当你有一个部分完成的键时,你可以选择构建单词完成列表。
【讨论】: