C ++ Map Iterator查找重复次数最多的单词

时间:2018-12-03 13:28:31

标签: c++

程序打印出重复次数最多的单词。如果有两个以上不是最重复的单词,我该如何打印“ ---”?目前只能使用2个字。

  

如果输出为:2苹果香蕉,则打印“ ---”

     

输入:5个苹果苹果香蕉苹果香蕉

     

输出:苹果

如何使它像这样:

  

输入:4苹果苹果香蕉香蕉

     

输出:“ ---”

#include <iostream>
#include <algorithm>
#include <map>
using namespace std;

void most_repeated_word(int n)
{
    using mmap = map<string, int>; mmap freq;
    string word;

    for (int i = 0; i < n; i++)
    {
        cin >> word;
        freq[word]++;
    }

    auto it = max_element(begin(freq), end(freq), []
    (const mmap::value_type& a, const mmap::value_type& b)
    { return a.second < b.second; });

    if ((it == end(freq)) || (it->second < 2))
        cout << "---" << endl;
    else
        cout << it->first << endl;
}

    int main() {

    int n;

    while (cin >> n) 
    {
        if (n < 1 && n > 100000) return 0;
        most_repeated_word(n);
    }
    system("pause");
}

1 个答案:

答案 0 :(得分:0)

一旦达到最大值,请计算相似性元素的数量:

auto value = it->second;
auto count = count_if(begin(freq), end(freq), [&]
    (const mmap::value_type& a)
    {return a.second == value;});

如果count中的数量超过1,则打印'---':

if (it->second < 2 || count != 1)
    cout << "---" << endl;
else
    cout << it->first << endl;