Словарь частот C++
Задача: Напишите программу, которая строит алфавитно-частотный словарь для файла input.txt , в котором в столбик записаны слова, состоящие только из строчных букв латинского алфавита. Слова нужно отсортировать в порядке убывания частоты (сначала слова, которые встретились чаще всего). Слова с одинаковой частотой должны располагаться в алфавитном порядке.
Входные данные Входной файл содержит неизвестное количество строк, в каждой из которых записано слово, состоящее только из строчных букв латинского алфавита. Последняя строка файла – пустая.
Выходные данные Программа должна вывести в файл output.txt все различные слова, которые встретились исходном файле, по одному слову в строке. После каждого слова через пробел записывается количество таких слов в файле. Слова должны быть отсортированы по убыванию частоты (сначала слова, которые встретились чаще всего). Слова с одинаковой частотой должны располагаться в алфавитном порядке.
Примеры входные данные i was he was she he выходные данные he 2 was 2 i 1 she 1
Я написал сохранение слов в словарь, подсчёт кол-ва повторений, вектор с ключами. Далее попытался написать сортировку с компаратором, но святой Информатикс выдаёт ошибку на четвёртом тесте. Ссылка на задачу
код:
#include <bits/stdc++.h>
using namespace std;
map<string, int> dict;
bool comp(const string& a, const string& b)
{
if(dict[a] == dict[b] and a < b){
return true;
}
return false;
}
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
string s;
vector<string> keys;
while (cin >> s){
if(!dict.count(s)){
dict[s] = 1;
keys.push_back(s);
}
else{
dict[s]++;
}
}
sort(keys.begin(), keys.end(), [](const string& a, const string& b){ return dict[a] > dict[b];});
sort(keys.begin(), keys.end(), comp);
for(auto i: keys){
cout << i << " " << dict[i] << endl;
}
}