Как отсортировать std::map по значению?

236
29 июня 2017, 03:49

Допустим есть

std::map<string, int> MyMap;

Как вывести содержимое контейнера, начиная с наибольшего значения? Сам контейнер дальше не используется.

Answer 1

Например:

map<string, int> MyMap;
MyMap["3"] = 30;
MyMap["1"] = 10;
MyMap["2"] = 20;
MyMap["4"] = 0;
for (pair<string, int> pair : MyMap) {
    cout << pair.first << ": " << pair.second << '\n';
}
cout << '\n';
map<int, string> reverseMyMap;
for (pair<string, int> pair : MyMap) {
    reverseMyMap[pair.second] = pair.first;
}
cout << "Reverse:\n";
map<int, string>::reverse_iterator it = reverseMyMap.rbegin();
while (it != reverseMyMap.rend()) {
    cout << it->first << ": " << it->second << '\n';
    it++;
}

Консоль:

1: 10
2: 20
3: 30
4: 0
Reverse:
30: 3
20: 2
10: 1
0: 4
Answer 2

Выполнить итерирование не от .begin() до .end(), а от .rbegin() до .rend() - словом, воспользоваться reverse_iterator.

READ ALSO
Еще раз про перегрузку операторов для своего класса строк

Еще раз про перегрузку операторов для своего класса строк

Задача написать свой класс "Строка"Столкнулся с такой проблемой: во время выполнения программы ошибка "Expression:CrtlsValidHeapPointer(block)"

225
Qt C++ Заголовки таблицы

Qt C++ Заголовки таблицы

Привет всемЕсть TableWidget и есть QStringList c элементами

354
Почему i[array] подобен array[i]? [дубликат]

Почему i[array] подобен array[i]? [дубликат]

На данный вопрос уже ответили:

240
shared_ptr ошибка при линковке c++

shared_ptr ошибка при линковке c++

pastebincom - исходный код заголовочного файла с реализацией shared_ptr

218