C++需要比较一个字符串到200.000个单词

Kat*_*e83 6 c++ compare words

在我的C++程序中......

用户在程序字符串"foo"中键入.

我需要这个字符串与我的字符串进行比较,在txt文件中写:这个字符串是名词!(或形容词......)

我有几个TXT文件 - 一个带有名词的文件,带有形容词的第二个文件......但是在每个文件中大约有200,000个单词.

我怎样才能有效地将这个字符串"foo"与我文件中的字符串进行比较?

我需要用什么?

bra*_*boy 15

为此使用TRIE数据结构.您应该需要一些内存来构建数据结构.但是你的目标将是最有效的.


Tro*_*nic 14

把你的单词放在std::set<std::string>容器中并对它们进行查找.这为访问提供了O(log n)时间,这可能足以满足您的需求.

您还可以使用std::map<std::string, std::string>键是单词的位置,值是类(例如"名词").

  • std :: unordered_set或std :: unordered_map可能是更好的选择.如果您没有为每次搜索重新加载数据,那么将单词读入容器应该是您使用的标准容器."完美"的数据结构取决于使用情况 - 一个trie(也就是数字树)是一种选择,三元树稍慢但内存效率更高,但增益可能不足以证明开发时间的合理性. (4认同)
  • @Kate:是的.200k什么都没有. (3认同)
  • 我想提出这个答案,但我不能因为最后一句话.`map <string,WordCategory>`将是更高效的内存,`WordCategory`是一个枚举. (3认同)