Сортировка вектора пар [дубликат]

этот вопрос уже есть ответ здесь:

прилетели,

у меня вопрос о сортировке вектора пар:

std::vector<std::pair<double,Processor*>> baryProc;

этот вектор уже заполнен парами. Теперь я хотел отсортировать пары внутри вектора на основе двойного значения внутри пары

пример:

предположим, у меня есть 3 пары внутри вектора. pair1 на передних и 3 пары в конце. pair2 посередине:

pair1(1, proc1) 
pair2(3, proc2)
pair3(2.5, proc3)

Теперь я хочу отсортировать пары на основе двойной стоимости. Так что порядок внутри вектора:

pair1(1, proc1) 
pair3(2.5, proc3)
pair2(3, proc2)

как я мог это сделать? Я совершенно сбит с толку.

Спасибо за помощь

2 ответов


в C++ вы можете иметь пользовательские функции компаратора, которые определяют, как решить, идет ли один элемент перед другим при сортировке. В вашем случае, учитывая 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);

#include <algorithm>

int main(){

    std::vector<std::pair<double,Processor*>> baryProc;

    std::sort(baryProc.begin(),baryProc.end());
}

обратите внимание, что вам не нужен пользовательский компаратор, потому что компаратор по умолчанию пары делает то, что вы хотите. Сначала он сравнивает первый элемент, и если они идентичны, он сравнивает второй элемент в паре.