Maison >développement back-end >C++ >Comment puis-je trier un vecteur de paires en fonction du deuxième élément en 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!