Maison >développement back-end >C++ >Comment trier les vecteurs de paires en fonction de leurs seconds éléments en C ?

Comment trier les vecteurs de paires en fonction de leurs seconds éléments en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-10 21:48:14550parcourir

How to Sort Vectors of Pairs Based on Their Second Elements in C  ?

Tri des vecteurs de paires en fonction des seconds éléments

Étant donné un vecteur de paires, on peut souhaiter les organiser par ordre croissant en fonction de leur deuxièmes éléments. Tandis que la construction d'objets de fonction personnalisés accomplit cette tâche, voyons si la bibliothèque de modèles standard (STL) nous offre des méthodes plus pratiques.

Utilisation d'un comparateur personnalisé

Le troisième Le paramètre de std::sort permet de spécifier une fonction de comparaison personnalisée. Nous pouvons en définir un comme suit :

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

Utilisation de Lambdas en C 11 et versions ultérieures

En C 11 et versions ultérieures, les lambdas offrent une alternative compacte :

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

Exploiter les modèles pour Flexibilité

Pour une réutilisabilité accrue, on peut définir un comparateur basé sur 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);
    }
};

Cela permet une flexibilité encore plus grande :

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