Как эффективно сортировать вектор паров по вторым элементу
Эта статья рассматривает вопрос сортировки вектора паров на основе на основе на основе на основе на основе Второй элемент каждой пары в порядке возрастания. Хотя создание пользовательского объекта функции для этой задачи является жизнеспособным решением, существуют альтернативные методы, в которых используются существующие компоненты STL и std :: mess.
с использованием std :: sort с пользовательским компаратором ]
один подход состоит в том, чтобы использовать пользовательский компаратор в качестве необязательного третьего аргумента на std :: sort. Этот пользовательский компаратор, называемый sort_pred, определяется следующим образом:
struct sort_pred { bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; } };
Чтобы использовать этот компаратор, просто передайте его std :: sort:
std::sort(v.begin(), v.end(), sort_pred());
с использованием c 11 lambdas
Если использует компилятор C 11, вы можете использовать Lambdas вместо пользовательского компаратора:
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; });
, используя общий шаблон для пары сортировки
для большей гибкости и повторного использования, вы можете создать общий шаблон с названием sort_pair_second:
template <class T1, class T2, class Pred = std::less<T2> > struct sort_pair_second { bool operator()(const std::pair<T1,T2>&left, const std::pair<T1,T2>&right) { Pred p; return p(left.second, right.second); } };
с этим шаблоном вы можете достичь желаемой сортировки следующим образом:
std::sort(v.begin(), v.end(), sort_pair_second<int, int>());]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3