Сортировка вектора пар
Heyho,
У меня вопрос о сортировке вектора пар:
std::vector<std::pair<double,Processor*>> baryProc;
этот вектор уже заполнен парами.
Теперь я хотел отсортировать пары внутри вектора на основе двойного значения внутри пары
Пример:
Предположим, что у меня есть 3 пары внутри вектора. Пара 1 находится спереди, а пара 3 - в конце. Пара 2 находится посередине:
pair1(1, proc1)
pair2(3, proc2)
pair3(2.5, proc3)
теперь я хочу сортировать пары на основе двойного значения. Итак, порядок внутри вектора:
pair1(1, proc1)
pair3(2.5, proc3)
pair2(3, proc2)
Как я могу это сделать? Я совсем застрял.
Спасибо за помощь
Ответы
Ответ 1
В С++ вы можете иметь пользовательские функции компаратора, которые определяют, как решить, будет ли один элемент переходить к другому при сортировке. В вашем случае, учитывая 2 пары, вы хотите иметь тот, у которого нижнее значение для первого элемента должно идти до другого. Вы можете написать функцию компаратора следующим образом:
// This function returns true if the first pair is "less"
// than the second one according to some metric
// In this case, we say the first pair is "less" if the first element of the first pair
// is less than the first element of the second pair
bool pairCompare(const std::pair<double, Processor*>& firstElem, const std::pair<double, Processor*>& secondElem) {
return firstElem.first < secondElem.first;
}
Теперь передайте эту функцию в свой метод сортировки:
//The sort function will use your custom comparator function
std::sort(baryProc.begin(), baryProc.end(), pairCompare);
Ответ 2
#include <algorithm>
int main(){
std::vector<std::pair<double,Processor*>> baryProc;
std::sort(baryProc.begin(),baryProc.end());
}
Обратите внимание, что вам не нужен настраиваемый компаратор, потому что компаратор по умолчанию для пары делает то, что вы хотите. Сначала он сравнивается по первому элементу, и если они идентичны, он сравнивает второй элемент в паре.