Сортировка вектора пар [дубликат]
этот вопрос уже есть ответ здесь:
- сортировка std::vector> по строке? 3 ответы
прилетели,
у меня вопрос о сортировке вектора пар:
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());
}
обратите внимание, что вам не нужен пользовательский компаратор, потому что компаратор по умолчанию пары делает то, что вы хотите. Сначала он сравнивает первый элемент, и если они идентичны, он сравнивает второй элемент в паре.