Как я могу отсортировать карту STL по значению?

Как я могу реализовать сортировку карты STL по значению?

Например, у меня есть карта m:

map<int, int> m;
m[1] = 10;
m[2] = 5;
m[4] = 6;
m[6] = 1;

Я хотел бы отсортировать ту карту по mзначение. Так, если бы я печатаю карту, я хотел бы получить результат следующим образом:

m[6] = 1
m[2] = 5
m[4] = 6
m[1] = 10

Как я могу отсортировать карту таким образом? Есть ли какой-либо способ, которым я могу иметь дело с ключом и значением с отсортированными значениями?

48
задан honk 7 February 2018 в 20:47
поделиться

4 ответа

Вы можете построить вторую карту со значениями первой карты в качестве ключей и ключами первой карты в качестве значений.

Это работает, только если все значения различны. Если вы не можете этого предположить, тогда вам нужно построить мультимарту вместо карты.

31
ответ дан 26 November 2019 в 18:36
поделиться

Сначала выгрузите все пары ключ-значение в набор > , где набор конструируется с помощью функтора «меньше чем», который сравнивает только второе значение пары. Таким образом, ваш код по-прежнему работает, даже если не все ваши значения различны.

Или выгрузите пары ключ-значение в vector > , а затем отсортируйте этот вектор с тем же функтором «меньше чем».

61
ответ дан 26 November 2019 в 18:36
поделиться

Вы должны использовать Boost.Bimap для такого рода вещей.

4
ответ дан 26 November 2019 в 18:36
поделиться

Интересно, как мне реализовать сортировку карты STL по значению.

Вы не можете, по определению . Карта - это структура данных, в которой элементы сортируются по ключу.

16
ответ дан 26 November 2019 в 18:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: