Сортировка словаря в С++
Главное
- Обычный 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 - это просто
два значения в одной упаковке!