我有一个结构:
struct wordItem
{
string word;
int count;
};
我正在阅读包含许多不同单词的文本文件,并将它们存储到数组中。
ifstream inputFile("data.txt");
if(inputFile.is_open())
{
while(getline(inputFile, data, ' '))
{
wordItemList[i].word = data;
i++;
}
}
我的问题是每次单词出现在数组中时计算的最佳方法是什么。例如,如果我的data.txt文件是
the fox jumped over the fence
我希望能够在“int count”中存储每个单词在结构中出现的次数。
答案 0 :(得分:1)
使用std::multiset
或std::unordered_multiset
。性能取决于您的数据集,因此需要进行一些调整才能在实践中找到最佳的数据集。这样的东西可以工作(适应你的文件阅读代码):
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_multiset<string> dict;
for (auto&& s : {"word1", "word2", "word1"}) {
dict.insert(s);
}
std::cout << dict.count("word1") << std::endl; // prints 2
return 0;
}
取决于数据集&amp;大小,您还可以使用更优化的数据结构来存储&amp;比较字符串,例如trie,但这在标准中不可用,或boost
并且大部分时间都有点过分恕我直言(尽管你可以找到some implementations)
答案 1 :(得分:1)
ifstream inputFile("data.txt");
if(!inputFile.is_open()) {
cerr << "Can't open data.txt\n";
exit(0);
}
map<string, int> freq;
while(getline(inputFile, word, ' '))
++freq[word];