在我的C ++程序中......
程序字符串“foo”中的用户类型。
我需要比较这个字符串到我的字符串,在txt文件中写:这个字符串是名词! (或形容词......)
我有几个TXT文件 - 一个带有名词的文件,带有形容词的第二个文件......但是每个文件大约有200,000个单词。
如何有效地将此字符串“foo”与我文件中的字符串进行比较?
我需要使用什么?
答案 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的外部文件或链式散列表,它可以提供非常快的查找时间和最小的查找数据。