Сортировка словаря в С++
Главное
	- Обычный map - всегда отсортирован по ключам (A-Z, 0-9)
- Чтобы сортировать по значениям - делаем вектор из пар и сортируем его
- Для обратного порядка - используем greater<>или меняем знак в функции сравнения
// 1. Берем словарь
map<string, int> dict = {{"banana", 3}, {"apple", 1}, {"cherry", 2}};
// 2. Делаем из него вектор
vector<pair<string, int>> items(dict.begin(), dict.end());
// 3. Сортируем вектор по числам (значениям)
sort(items.begin(), items.end(), compareByValue);
// 4. Используем отсортированный вектор
compareByValue - это простая функция, которая говорит сортировке как сравнивать элементы.
Как работает
bool compareByValue(pair<string, int> a, pair<string, int> b) {
    return a.second < b.second;
}
Что означают a.second и b.second?
	- a.second- значение первого элемента (число)
- b.second- значение второго элемента (число)
Правило простое:
	- return a.second < b.second= сортировать по возрастанию (1, 2, 3)
- return a.second > b.second= сортировать по убыванию (3, 2, 1)
 
Что такое pair?
pair - это контейнер для двух значений. Как карманы в штанах - в левый положили одно, в правый - другое.
 
pair<string, int> fruit = {"apple", 5};
cout << fruit.first;   // "apple" - первое значение
cout << fruit.second;  // 5       - второе значение
Используется при:
	- работе со словарями, 
- возврате двух значений из функции
- хранении координаты точки (x,y) 
Pair - это просто 
два значения в одной упаковке!