c++ - 在 C++ 中从字典文件创建 map 的 map

标签 c++ performance dictionary

我有一个包含单词列表的文本文件(大约 35 MB 的数据)。我编写了一个应用程序,其工作方式非常类似于拼字游戏助手等。我发现将整个文件加载到一个集合中是不够的,因为大约需要 10 分钟才能完成。我对 C++ 没有那么丰富的经验,因此我想问你有什么更好的方法来实现它?在我的应用程序的第一个版本中,我只是对它进行了二进制搜索。所以我设法通过对文件进行二进制搜索来解决这个问题(不加载它,只是使用eekg移动文件指针)。但这个解决方案不如使用 map 的 map 那么快。当搜索单词时,我会在 map 中查找它的第一个字母。然后,我检索可能的第二个字母的 map ,并进行另一次搜索(针对第二个字母),依此类推。这样我就能更快地判断出这个词是否在字典中。如何在不将整个文件加载到程序中来制作这些 map 的情况下实现它?我可以将它们保存在数据库中并读取它们吗?这样会更快吗?

最佳答案

35MB 的数据很小。将其全部加载到内存中没有问题,并且没有理由需要 10 分钟才能加载。如果需要这么长时间,我怀疑您的加载方案会重新复制 map 。

但是,也许您应该尝试一些准备好的东西,而不是解决这个问题或提出自己的方案。

您的描述听起来像是您可以使用嵌套结构的数据库。 MongoDB ,其中有 C++ interface ,是一种可能的解决方案。

为了提高效率,您可以对这个方案进行一些花哨。说出最多 5 个字母的单词,您可以使用 multikey index 。除此之外,您可以使用完全嵌套的结构。

只是不要自己做。专注于你的程序逻辑。

关于c++ - 在 C++ 中从字典文件创建 map 的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30681525/

相关文章:

linux - 如何解决运行速度非常慢的 Perl 脚本在一台服务器上运行速度较快但在另一台服务器上运行速度较慢的问题

javascript - 反序列化Json字典obj以显示多个值

c++ - 传递 va_list 的一部分

C++:类中的回调

asp.net - 读取文件属性有多贵? 。网

performance - 对接口(interface)而不是实现进行编码是否意味着性能下降?

python - 找到两个字典键之间的重叠并从两个字典值创建一个新字典

python - 字典联合python

C++:是否有一种有效的方法来在句法上使用像指针这样的索引?

c++ - 图增量构建的性能问题