Tri personnalisé des vecteurs de paires
Considérez le scénario dans lequel vous souhaitez trier un vecteur de paires (
std : vector<std::pair<int, int>>) basé sur le deuxième élément de chaque paire par ordre croissant.
Pour y parvenir sans implémenter un objet fonction distinct, vous pouvez utiliser le troisième paramètre de
std::sort, qui accepte un comparateur personnalisé. Ce comparateur compare deux paires en fonction de leurs seconds éléments à l'aide du comparateur fourni.
Par exemple, en utilisant un compilateur C 11, vous pouvez définir un comparateur avec une expression lambda :
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; });
Alternativement , définissez une structure personnalisée qui surcharge le
operator()fonction pour effectuer la comparaison :
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());
Si vous désirez une solution générique pouvant être réutilisée avec différents types et comparateurs, créez un modèle comme celui-ci :
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, vous pouvez trier les paires à l'aide de n'importe quel comparateur personnalisé :
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!