字典的数据结构
Data Structure for a dictionary?
存储字典的最佳数据结构是什么?哈希表还是尝试?考虑一下以后更多的单词可以被添加到字典中的可能性。
std::unordered_map
或std::map
将是字典的最佳数据结构。std::unordered_map
相当于c++ 11中的哈希表。而std::map
为常规关联容器
这两种数据结构都不是"更好"的。这完全取决于你的需要。
如果你主要对回答"字符串X是否存在于我的哈希表中"这个问题感兴趣,那么字符串哈希表是很好的。它支持(通常)快速查找,并且内存占用很小;每个字符串只存储一次。然而,它依赖于一个好的哈希函数的存在,对于病态输入很容易产生哈希冲突,并且不允许您进行诸如"哪个字符串最接近我的字符串?"
对于存储字符串来说,trie是一种很好的数据结构,它提供了很好的最坏情况查找(您只需要查看输入字符串的每个字符一次)。它还有一个优点,具有类似前缀的字符串可以被紧凑地存储。此外,trie允许您搜索具有给定前缀的字符串,或者高效地进行正则表达式搜索,或者高效地查找附近的单词。它的缺点是,由于存储指针的数量,tree的内存使用量往往比哈希表要高得多。
除了这些,您还可以考虑其他数据结构。基数尝试和Patricia树提供了更精简的尝试表示,但增加了一些编程复杂性。如果你主要感兴趣的是有效地找到与某个初始字符串"接近"的所有字符串,可以使用BK-trees。
简而言之,如果内存很宝贵,或者你不需要做"关闭字符串"搜索,散列表是一个很好的选择。如果您需要查找附近的字符串或执行其他字符串操作,则tree可能是更好的选择。
希望这对你有帮助!
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- 尝试字典上的数据结构以查找押韵的单词
- 您将使用什么数据结构来实现字典
- 如何在不使用STL的情况下实现C++字典数据结构
- c++中是否有任何数据结构或库可以像Python列表和字典一样工作?
- c++中使用哪一种数据结构来处理庞大的常量字典
- 关于实现字典数据结构的正确方法的一般问题
- 字典的数据结构