Maison > développement back-end > C++ > Comment trier efficacement un vecteur de paires par le deuxième élément ?

Comment trier efficacement un vecteur de paires par le deuxième élément ?

Linda Hamilton
Libérer: 2024-12-09 13:47:24
original
952 Les gens l'ont consulté

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

Comment trier efficacement un vecteur de paires par deuxième élément de paire

Cet article aborde la question du tri d'un vecteur de paires en fonction du deuxième élément de chaque paire par ordre croissant. Bien que la création d'un objet fonction personnalisé pour cette tâche soit une solution viable, il existe des méthodes alternatives qui utilisent les composants STL existants et std::less.

Utilisation de std::sort avec un comparateur personnalisé

Une approche consiste à utiliser un comparateur personnalisé comme troisième argument facultatif pour std::sort. Ce comparateur personnalisé, appelé sort_pred, est défini comme suit :

struct sort_pred {
    bool operator()(const std::pair<int,int> &amp;left, const std::pair<int,int> &amp;right) {
        return left.second < right.second;
    }
};
Copier après la connexion

Pour utiliser ce comparateur, transmettez-le simplement à std::sort:

std::sort(v.begin(), v.end(), sort_pred());
Copier après la connexion

Utilisation de C 11 Lambdas

Si vous utilisez un compilateur C 11, vous pouvez exploiter les lambdas dans place d'un comparateur personnalisé :

std::sort(v.begin(), v.end(), [](const std::pair<int,int> &amp;left, const std::pair<int,int> &amp;right) {
    return left.second < right.second;
});
Copier après la connexion

Utilisation d'un modèle générique pour le tri par paires

Pour une plus grande flexibilité et réutilisabilité, vous pouvez créer un modèle générique appelé sort_pair_second :

template <class T1, class T2, class Pred = std::less<T2> >
struct sort_pair_second {
    bool operator()(const std::pair<T1,T2>&amp;left, const std::pair<T1,T2>&amp;right) {
        Pred p;
        return p(left.second, right.second);
    }
};
Copier après la connexion

Avec ce modèle, vous pouvez réaliser le tri souhaité comme suit :

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal