检查向量中的重复项并将它们计算为c ++

时间:2017-04-10 12:35:40

标签: c++ vector

我的目标是检查向量中的重复项,并将它们与重复计数一起发布。例如:

vector<string> vec{"words", "words", "are", "fun", "fun", "fun"};
// words - 2
// fun - 3

我找到了很好的解决方案,但我不知道有没有办法打印计数器:

vector<string> vec{"words", "words", "are", "fun", "fun", "fun"};
sort(vec.begin(), vec.end());
set<string> uvec(vec.begin(), vec.end());
list<string> output;

set_difference(vec.begin(), vec.end(),
               uvec.begin(), uvec.end(),
               back_inserter(output));

for (list<string>::iterator i = output.begin(); i != output.end(); ++i)
    cout << *i << endl;

1 个答案:

答案 0 :(得分:3)

您可以简单地保留一个map来计算单词数量。

vector<string> vec{"words", "words", "are", "fun", "fun", "fun"};
map<string, int> words;
for(const auto& x : vec) ++(words[x]);

for(const auto& [k, v] : words) 
    if(v > 1) cout << k << " - " << v << "\n";

live wandbox example

请注意,我使用名为&#34;结构化绑定&#34; 的C ++ 17功能将words的对解构为{{ 1}}。如果您没有C ++ 17编译器,则可以使用[k, v]并使用const auto& p : wordsp.first访问配对成员。