6

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

用户键入程序字符串“foo”。

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

我有几个 TXT 文件 - 一个带有名词的文件,第二个带有形容词的文件……但每个文件中大约有 200.000 个单词。

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

我需要使用什么?

4

6 回答 6

15

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

于 2010-02-28T19:15:17.097 回答
14

将您的话放入std::set<std::string>容器中并进行查找。这为访问提供了 O(log n) 时间,这对于您正在做的事情可能已经足够了。

您还可以使用std::map<std::string, std::string>where 键是单词,值是类(例如“名词”)。

于 2010-02-28T19:14:28.173 回答
1

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

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

当您想要进行查找时,您可以获取单词的 CRC,并在表中进行查找。

于 2010-02-28T19:19:45.590 回答
1

如果您有很多具有共同根/前缀的字符串(字典可能就是这种情况,即具有多种形式的单词 - 尽管这可能取决于语言)。

于 2010-03-01T04:44:04.467 回答
0

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

于 2010-03-01T14:11:49.017 回答
0

你只需要确认它是否匹配吗?

如果是这样,请使用 Trie。

于 2010-02-28T19:14:36.337 回答