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
Linda Hamiltonoriginal
2024-12-16 21:31:121009parcourir

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

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

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

Avec ce modèle, nous pouvons maintenant trier en utilisant :

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

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!

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