如何计算结构数组中的唯一元素数量?

时间:2016-09-05 20:53:24

标签: c++ arrays struct element counting

我有一个结构:

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”中存储每个单词在结构中出现的次数。

2 个答案:

答案 0 :(得分:1)

使用std::multisetstd::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];