在我的 C++ 程序中...
用户键入程序字符串“foo”。
我需要将此字符串与我的字符串进行比较,在 txt 文件中写入:此字符串是名词!(或形容词...)
我有几个 TXT 文件 - 一个带有名词的文件,第二个带有形容词的文件……但每个文件中大约有 200.000 个单词。
如何有效地将这个字符串“foo”与我文件中的字符串进行比较?
我需要使用什么?
为此使用TRIE数据结构。您应该需要一些内存来构建数据结构。但你的目标将是最有效的。
将您的话放入std::set<std::string>
容器中并进行查找。这为访问提供了 O(log n) 时间,这对于您正在做的事情可能已经足够了。
您还可以使用std::map<std::string, std::string>
where 键是单词,值是类(例如“名词”)。
我建议您使用 sqlite 来代替您的文件。
您可以创建每个键值的 CRC,并将键和值 (int) 存储到表中。为关键字段创建索引。
当您想要进行查找时,您可以获取单词的 CRC,并在表中进行查找。
如果您有很多具有共同根/前缀的字符串(字典可能就是这种情况,即具有多种形式的单词 - 尽管这可能取决于语言)。
您可以将索引的外部文件存储为 btree 或链式哈希表,它将提供非常快的查找时间和最小的查找数据。
你只需要确认它是否匹配吗?
如果是这样,请使用 Trie。