c ++, stl, map как сортировать по значению, а не по ключу - PullRequest
4 голосов
/ 27 декабря 2011

Я хочу отсортировать элементы в контейнере карты, используя только значения, а не ключи.как это сделать?Я знаю, что карту можно отсортировать по значению ключа, но как это сделать наоборот.Я нашел тот же вопрос в stackoverfrlow.Мне нравится это решение .Однако я хочу уточнить, что означает «сброс в pair<K,V>».Я не хочу создавать специальные структуры для этого, это не элегантно.как вы реализуете это решение ?

1 Ответ

19 голосов
/ 27 декабря 2011

Чтобы выгрузить информацию из std :: map в std :: vector, вы можете использовать конструктор std :: vector, который принимает два итератора.

std::vector<std::pair<K,V> > myVec(myMap.begin(), myMap.end());

Затем вы должны отсортировать его с помощью:

std::sort(myVec.begin(),myVec.end(),&myFunction);

myFunction будет функцией, определенной с сигнатурой:

bool myFunction(std::pair<K,V> first, std::pair<K,V> second);

Вернет ли она значение true, если вы находитесь в правильном порядке (т.е. сначала должно быть перед вторым).Возвращайте false, когда они находятся в неправильном порядке (то есть секунда должна быть перед первой).


Кроме того, вы можете посмотреть на boost :: bimap , который выглядит более настроеннымк вашей проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...