我的目标是检查向量中的重复项,并将它们与重复计数一起发布。例如:
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;
答案 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";
请注意,我使用名为&#34;结构化绑定&#34; 的C ++ 17功能将words
的对解构为{{ 1}}。如果您没有C ++ 17编译器,则可以使用[k, v]
并使用const auto& p : words
和p.first
访问配对成员。