我有一个包含单词列表的文本文件(大约 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/