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
515 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!

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