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

Comment trier un vecteur de paires en C en fonction du deuxième élément ?

Linda Hamilton
Libérer: 2024-12-16 21:31:12
original
1003 Les gens l'ont consulté

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

Tri d'un vecteur de paires basé sur le deuxième élément

En C , nous pouvons rencontrer des situations où nous devons trier un vecteur de paires basé sur le deuxième élément. Explorons comment y parvenir sans effort en utilisant les informations fournies.

Le vecteur de paires fourni, vec, contient des paires d'entiers et nous souhaitons le trier par ordre croissant en fonction du deuxième élément de chaque paire. Sans recourir à des objets de fonction personnalisés, exploitons la bibliothèque de modèles standard (STL) et std::less pour faire le travail.

Utiliser C 14 Lambdas

La solution la plus simple en C 14 exploite les lambdas avec inférence de type de paramètre :

std::sort(vec.begin(), vec.end(), [](auto &left, auto &right) {
    return left.second < right.second;
});
Copier après la connexion

Ce lambda anonyme capture les paires gauche et droite et renvoie vrai si la seconde L'élément de gauche est inférieur à celui de droite, triant efficacement le vecteur par ordre croissant.

Utilisation de comparateurs personnalisés

Si les lambdas ne sont pas une option, nous pouvons définir un comparateur personnalisé pour gérer le tri :

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

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

La structure sort_pred implémente l'opérateur de comparaison, comparant les deuxièmes éléments des deux paires et renvoyant vrai si la gauche L'élément de la paire est inférieur à celui de droite.

Utiliser un comparateur de modèles

Pour généraliser le comparateur et le réutiliser pour le tri, nous pouvons créer un modèle :

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, nous pouvons maintenant trier en utilisant :

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

En fournissant les arguments du modèle, nous spécifions les types des éléments de la paire et peut même personnaliser la comparaison en utilisant un prédicat différent comme std::greater pour l'ordre décroissant.

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