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

时间:2010-02-28 19:11:39

标签: c++ compare words

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

程序字符串“foo”中的用户类型。

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

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

如何有效地将此字符串“foo”与我文件中的字符串进行比较?

我需要使用什么?

6 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:14)

将您的文字放在std::set<std::string>容器中并对其进行查找。这为访问提供了O(log n)时间,这可能足以满足您的需求。

你也可以使用std::map<std::string, std::string>,其中键是单词,值是类(例如“名词”)。

答案 2 :(得分:1)

我建议您使用sqlite代替您的文件。

您可以为每个键值创建CRC,并将键和值(int)存储到表中。为关键字段创建索引。

如果要进行查找,可以使用单词的CRC,然后在表格中进行查找。

答案 3 :(得分:1)

如果你有很多具有共同根/前缀的字符串,那么Radix tree将为字符串提供比'常规'特里结构更好的内存使用量(这可能是字典的情况,即具有多种形式的字词 - 虽然这可能取决于语言)。

答案 4 :(得分:0)

您只需要确认它是否匹配任何内容?

如果是这样,请使用Trie。

答案 5 :(得分:0)

您可以存储索引为btree的外部文件或链式散列表,它可以提供非常快的查找时间和最小的查找数据。