2011-12-27 2 views
3

Я хочу сортировать элементы в контейнере карты, используя только значения, отличные от ключа. как это сделать? Я знаю, что карта может сортироваться по ключевому значению, но как сделать наоборот. Я нашел тот же вопрос в stackoverfrlow. Мне это нравится solution. Однако я хочу уточнить, что это означает «свалка в pair<K,V>». Я не хочу создавать для вас особую структуру, она не изящна. как вы это реализуете? solution?C++, stl, map how sort with value, not key

+1

Целью карты является сортировка по ключевому слову ... вы не можете сортировать два в одно и то же время ... (i do not downvote :)) –

+0

Что вы подразумеваете под "сортировать карту контейнера"? Собственно, сортируйте элементы или отмените роль ключа и значение в поиске? Под «демпингом в« паре »вы подразумеваете вставку новой пары« ключ/значение »из« пары »? (ум, я не был нисходящим) – ssube

+3

Я отказался от вашего вопроса, потому что непонятно, в чем проблема. Что «не изящно»? У вас был три вопроса с тремя альтернативными решениями. –

ответ

19

Чтобы сбрасывать информацию с 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); 

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


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

+0

Спасибо, человек. Я не знал, что есть std :: pair. полезно – ashim

+0

, но каждый раз, когда меняется карта, вам нужно снова выполнять те же операции с вектором, чтобы сортировать его с новым контентом! –

+0

eharvest: Да, он, вероятно, тайно хочет boost :: bimap. – Lalaland