C++ 检查向量中的重复项并将其计数为c++;

C++ 检查向量中的重复项并将其计数为c++;,c++,vector,C++,Vector,我的目标是检查vector中的重复项,并将其与重复计数一起发布。例如: vector<string> vec{"words", "words", "are", "fun", "fun", "fun"}; // words - 2 // fun - 3 向量向量{“单词”、“单词”、“是”、“有趣”、“有趣”、“有趣”}; //单词-2 //乐趣-3 我找到了很好的解决方案,但我不知道是否有任何可能的方法来打印计数器: vector<string> vec{"words

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

vector<string> vec{"words", "words", "are", "fun", "fun", "fun"};
// words - 2
// fun - 3
向量向量{“单词”、“单词”、“是”、“有趣”、“有趣”、“有趣”}; //单词-2 //乐趣-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;
向量向量{“单词”、“单词”、“是”、“有趣”、“有趣”、“有趣”}; 排序(vec.begin(),vec.end()); 设置uvec(vec.begin(),vec.end()); 列表输出; 设置差异(向量开始(),向量结束(), uvec.begin(),uvec.end(), 背面插入器(输出); 对于(列表::迭代器i=output.begin();i!=output.end();++i)
cout你可以简单地保留一张统计字数的
地图

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";
向量向量{“单词”、“单词”、“是”、“有趣”、“有趣”、“有趣”}; 地图词; for(const auto&x:vec)+(words[x]); for(const auto&[k,v]:单词)
如果(v>1)我忘了我们现在可以在野外看到C++17:')我在第二个for循环中得到了const中的错误。我应该包括什么吗。表示“Expression expected”@TeodorKolev:我正在使用一个名为“结构化绑定”的C++17功能。如果你没有C++17编译器,你可以使用
const auto&p:words
并使用
p.first
p.second
访问对成员。对于(const auto&p:words)好的,p.first和p.second放在哪里?@VittorioRomeo也许你应该在答案中提到它(现在和将来)。注释是暂时的。您使用的是什么编译器(哪一个和哪一个版本)?