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
Linda Hamiltonoriginal
2024-12-09 13:47:24926parcourir

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;
    }
};

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

std::sort(v.begin(), v.end(), sort_pred());

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;
});

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);
    }
};

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

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());

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!

Déclaration:
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