Heyho,Сортировка вектора пара
У меня есть вопрос о сортировке вектора пара:
std::vector<std::pair<double,Processor*>> baryProc;
этот вектор уже заполнен с парами. Теперь я хотел, чтобы отсортировать пары внутри вектора на основе двойного значения внутри пары
Пример:
Предположим, у меня есть 3 пары внутри вектора. Пара 1 находится спереди, а пара 3 - в конце. pair2 находится посередине:
pair1(1, proc1)
pair2(3, proc2)
pair3(2.5, proc3)
сейчас я хочу сортировать пары на основе двойного значения. Таким образом, порядок внутри вектора:
pair1(1, proc1)
pair3(2.5, proc3)
pair2(3, proc2)
Как я могу это сделать? Я совершенно застрял.
Спасибо за помощь
+1 хороший пример устранения сравнения «.second» от нормального оператора less «std :: pair». Я бы предпочел функтор для этого (скорее всего, встроенный), но функциональное решение не работает. – WhozCraig
Спасибо за это хорошее объяснение. Я думаю, что стандартный компаратор будет работать нормально. Будет ли стандартный oparator правильно сортироваться, если двойные значения часто бывают одинаковыми? например: (1, proc1), (1, proc2), (2, proc3), (3, proc4), (3, proc5), .... – user2633791
@ user2633791 Что вы спрашиваете, [стабильная] (http://en.wikipedia.org/wiki/Stable_sort#Stability). Алгоритм сортировки является стабильным, если два элемента с одинаковым значением остаются в том же порядке относительно друг друга в конце сортировки, как и в начале. Алгоритм сортировки по умолчанию нестабилен, но STL предоставляет [стабильный вид] (http://www.cplusplus.com/reference/algorithm/stable_sort/), который должен соответствовать вашим целям. – maditya