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

Checking for duplicates in vector and count them c++

本文关键字:计算 c++ 向量 检查      更新时间:2023-10-16

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

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;

您可以简单地保留一个计算单词数的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";

活魔杖盒示例


请注意,我正在使用一个名为"结构化绑定">的 C++17 功能来解构words对以[k, v]。如果没有 C++17 编译器,则可以使用 const auto& p : words 并通过 p.firstp.second 访问配对成员。