2. Отсортированные списки №1

☰ Теория

По умолчанию данные в списках сортируются по ключу по возрастанию, часто бывает, что этот порядок сортировки нужно изменить.
Для этого можно написать компаратор, который будет располагать данные, так как вы укажите.

Пример компаратора, который сортирует по убыванию ключа (пишется перед main):

struct cmp
{
	bool operator()(const string &a, const string &b) const
	{
		return a > b;
	}
};

Данный компаратор используется в процессе инициализации словаря
map<string, int, cmp> mymap;

Построить алфавитно-частотный словарь: список слов в алфавитном порядке, справа от каждого слова должно быть указано, сколько раз оно встречается в исходном файле. Признаком окончания текста является "END!". Список должен быть отсортированный по ключу в лексикографическом порядке по убыванию (от я до а).
 
Примеры
Входные данныеВыходные данные
1 один
два
один
три
два
один
END!
три 1
один 3
два 2
2 маша маша любит кашу END!
маша 2
любит 1
кашу 1

Вставьте недостающие фрагменты кода
C++
#include<iostream>	
#include <map>
#include<string>
using namespace std;
struct cmp
{  
};

int main() {

	map<string, int, cmp> mymap;
	string s;
	while (!cin.eof())
	{
		cin >> s;
		if (s == "END!")  break;
		mymap[s]++;

	}
	map<string, int>::iterator it;

	for (it = mymap.begin(); it != mymap.end(); ++it)
	    cout <<  it->first << " " << it->second << "\n";
	
	return 0;
}