Подтвердить что ты не робот

Сортировка вектора пар

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)

Как я могу это сделать? Я совсем застрял.

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

4b9b3361

Ответ 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());
}

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