Maison > développement back-end > C++ > Comment personnaliser un tri d'un vecteur de paires en fonction du deuxième élément en C ?

Comment personnaliser un tri d'un vecteur de paires en fonction du deuxième élément en C ?

DDD
Libérer: 2024-12-13 12:12:10
original
542 Les gens l'ont consulté

How to Custom Sort a Vector of Pairs Based on the Second Element in C  ?

Tri personnalisé des vecteurs de paires

Considérez le scénario dans lequel vous souhaitez trier un vecteur de paires (

std : vector<std::pair<int, int>>
) basé sur le deuxième élément de chaque paire par ordre croissant.

Pour y parvenir sans implémenter un objet fonction distinct, vous pouvez utiliser le troisième paramètre de

std::sort
, qui accepte un comparateur personnalisé. Ce comparateur compare deux paires en fonction de leurs seconds éléments à l'aide du comparateur fourni.

Par exemple, en utilisant un compilateur C 11, vous pouvez définir un comparateur avec une expression lambda :

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

Alternativement , définissez une structure personnalisée qui surcharge le

operator()
fonction pour effectuer la comparaison :

struct sort_pred {
    bool operator()(const std::pair<int,int>& left, const std::pair<int,int>& right) {
        return left.second < right.second;
    }
};

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

Si vous désirez une solution générique pouvant être réutilisée avec différents types et comparateurs, créez un modèle comme celui-ci :

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);
    }
};
Copier après la connexion

Avec ce modèle, vous pouvez trier les paires à l'aide de n'importe quel comparateur personnalisé :

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal