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

How to count amount of unique elements in an array of structs?

我有一个结构:

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;"

中的结构中出现的次数

使用 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;
}

根据数据集和大小,您还可以使用更优化的数据结构来存储和比较字符串,例如 trie, but this is not available in the standard, or boost and most of the times is a bit of an overkill IMHO (although you can find some implementations)。

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];