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.
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.
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.
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!