«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно сортировать вектор пар по второму элементу?

Как эффективно сортировать вектор пар по второму элементу?

Опубликовано в 2025-02-26
Просматривать:129

How to Efficiently Sort a Vector of Pairs by the Second Element?

Как эффективно сортировать вектор паров по вторым элементу

Эта статья рассматривает вопрос сортировки вектора паров на основе на основе на основе на основе на основе Второй элемент каждой пары в порядке возрастания. Хотя создание пользовательского объекта функции для этой задачи является жизнеспособным решением, существуют альтернативные методы, в которых используются существующие компоненты 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