Primeiro, vamos lembrar que usar o multiset
do C++ é uma má ideia principalmente para fazer isso, pois a função count
é linear, e em geral, a estrutura não ajuda nem um pouco a implementação.
Então, ao invés de multiset
, vamos usar um map
para obter nossa contagem em O(n lg n):
map<int, int> freq;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
freq[x]++;
}
vector<pair<int, int>> bag;
for (auto f : freq) {
bag.push_back(make_pair(f.second, f.first));
}
sort(bag.rbegin(), bag.rend());
cout << "Elemento mais comum: " << bag[0].second << " com " bag[0].first << "ocorrências \n";
cout << "Segundo elemento mais comum: " << bag[1].second << " com " bag[0].first << "ocorrências \n";
Você pode alterar a função de ordenação para acomodar suas necessidades. Nesse caso, caso dois elementos tenham a mesma frequência, ganha o maior.