高效字典查找 我的C++应用程序需要检查一个词是否是有效的英语词典词。最好的方法是什么。有免费的字典我可以使用吗。我只需要收集所有可能的单词。如何使此查找成本最低。我需要散列吗

高效字典查找 我的C++应用程序需要检查一个词是否是有效的英语词典词。最好的方法是什么。有免费的字典我可以使用吗。我只需要收集所有可能的单词。如何使此查找成本最低。我需要散列吗,c++,C++,使用std::set或std::unordered\u set。后者是C++中的新的,并且可能或可能不被C++标准库实现支持;如果不支持,它可能会包含某种类型的散列集:请查阅您的文档以了解 其中哪一个(使用二进制搜索树的set,以及使用哈希表的unordered\u set)更有效取决于存储在容器中的元素数量以及标准库实现如何实现它们。您最好同时尝试这两种方法,看看哪种方法对您的特定场景效果更好 可选的是,如果单词列表是固定的,你可以考虑使用排序的 STD::向量,并使用 STD::BialyS

使用
std::set
std::unordered\u set
。后者是C++中的新的,并且可能或可能不被C++标准库实现支持;如果不支持,它可能会包含某种类型的
散列集
:请查阅您的文档以了解

其中哪一个(使用二进制搜索树的
set
,以及使用哈希表的
unordered\u set
)更有效取决于存储在容器中的元素数量以及标准库实现如何实现它们。您最好同时尝试这两种方法,看看哪种方法对您的特定场景效果更好


可选的是,如果单词列表是固定的,你可以考虑使用排序的<代码> STD::向量,并使用<代码> STD::BialySythSux</代码>来查找其中的单词。

< P>我在几个月前确实这样做过,或者接近这一点。你可能可以在网上免费找到一个

如本网站:

把它放在一个文本文件中,把单词和列表上的单词进行比较。它的顺序应该是n,n是列表中的字数。你需要更快的时间复杂度吗


希望这有帮助。

关于单词列表的存在,这取决于平台。 在Linux下,
/usr/share/dict/words
包含英语单词列表 这也许能满足你的需要。否则,无疑会有这样的清单 在网络上提供

考虑到这些列表的大小,最快速的访问将是加载它 放入哈希表<代码>标准::未排序的集合,如果您有;否则,许多 C++编译器附带一个<代码> HasyStAs< /C>,尽管不同的编译器有 一个稍微不同的界面,把它放在不同的位置 名称空间。如果仍然存在性能问题,那么可以这样做 如果您提前知道条目的数量,则更好(因此表不会 必须增长),并在std::vector(甚至是 C型阵列);处理碰撞会有点复杂, 不过

另一种可能是trie。这几乎肯定会产生结果 在查找中的基本操作数最少,并且是公平的 易于实现。典型的实现将具有非常差的性能 然而,这可能会使它比其他一些更慢 实际操作中的解决方案(或者不是唯一知道的方法是
同时实施和衡量)。

你的帖子中有太多与标题无关的小问题。尽量缩小范围。如果
hash\u集
也不可用,总会有
boost::unordered\u集
。谢谢提醒我。即使
hash\u集
可用,
boost::unordered\u集
可能更可取,因为1)它可以在boost支持的所有编译器中移植,2)它与
std::unordered\u集
完全对应(我认为),这将使迁移到标准变得更容易。我确实更喜欢它,但是有些人更喜欢编译器扩展,而不是包括Boost:)