std::map сортировать по данным?

Есть ли способ отсортировать std::map по данным, а не по ключу? Прямо сейчас мой код дублирует всю карту в массив только для этого.


person Jookia    schedule 21.10.2010    source источник
comment
Думаю, вам нужна другая карта с перевернутым ключом/значением?   -  person Daniel Mošmondor    schedule 22.10.2010
comment
Тоже не нашел нормального решения. Вы не можете просто поменять местами карту (как многие предлагают), потому что два значения могут быть одинаковыми, создавая новую карту, которая может иметь меньше элементов. На самом деле невозможно отсортировать карту по значению, так как карта сортируется по ключу (отсюда и скорость). Даже если вы попытаетесь создать новую отсортированную карту, вставив значения как вектор, вы все равно получите карту, отсортированную по ключу!!! Способ, который я внедрил в свой код, заключался в создании отсортированных векторов для каждого из ключей и значений и использовании векторов в моем приложении. Чтобы сделать векторы, я сначала   -  person ryanmartinneutrino    schedule 03.07.2013
comment
Возможный дубликат карты STL--› отсортировать по значению?   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 01.01.2017
comment
Возможный дубликат Сортировка std::map по значению   -  person Baum mit Augen    schedule 01.03.2019


Ответы (1)


Насколько я помню, std::map даст вам итератор, который будет проходить по элементам, отсортированным по ключу. Единственный способ просмотреть отсортированные элементы по значению и по-прежнему использовать карту — это переписать всю коллекцию на другую карту, поменяв местами ключ и значение.

person Daniel Mošmondor    schedule 22.10.2010
comment
Я обнаружил, что лучше использовать один вектор и просто находить что-то. - person Jookia; 22.10.2010
comment
Если вы это сделаете, вы потеряете информацию о паре ключ-значение. - person Peter Lee; 25.06.2013
comment
Я указываю на ответ Оли Чарльзворта на stackoverflow.com/a/5056797/158371 - person Christian Severin; 03.12.2013