Multiset/Bag ordenado por frequência como o Counter do Python em C++

Página Inicial / ∣V∣+∣E∣ (Gráfico) / Multiset/Bag ordenado por frequência como o Counter do Python em C++
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.