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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-10 22:35:11658parcourir

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

Tri des vecteurs de paires à l'aide du deuxième élément

Le tri des vecteurs de paires en fonction du deuxième élément est une tâche de programmation courante. Cet article explore différentes méthodes pour y parvenir en utilisant les composants STL existants et std::less.

Méthode 1 : Comparateur personnalisé

Un comparateur personnalisé est une approche courante. Créez une structure avec une fonction Operator() remplacée qui compare les paires en fonction de leurs seconds éléments. Par exemple :

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

Ensuite, appelez sort() avec ce comparateur comme troisième argument :

std::sort(vec.begin(), vec.end(), sort_pred());

Méthode 2 : Expression Lambda (C 11)

En C 11, vous pouvez utiliser une expression lambda pour définir la comparaison function :

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

Méthode 3 : Comparateur générique basé sur un modèle (C 11)

Pour le code réutilisable, créez un comparateur générique 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);
    }
};

Ensuite, appelez sort() avec ce modèle basé sur un modèle comparateur :

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

Recommandation

Pour la réutilisabilité, le comparateur générique basé sur un modèle est une option puissante. Cependant, par souci de simplicité, écrire un comparateur personnalisé ou une expression lambda est souvent suffisant.

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