Maison >développement back-end >C++ >Comment trier efficacement un vecteur de paires par le deuxième élément ?
Comment trier efficacement un vecteur de paires par deuxième élément de paire
Cet article aborde la question du tri d'un vecteur de paires en fonction du deuxième élément de chaque paire par ordre croissant. Bien que la création d'un objet fonction personnalisé pour cette tâche soit une solution viable, il existe des méthodes alternatives qui utilisent les composants STL existants et std::less.
Utilisation de std::sort avec un comparateur personnalisé
Une approche consiste à utiliser un comparateur personnalisé comme troisième argument facultatif pour std::sort. Ce comparateur personnalisé, appelé sort_pred, est défini comme suit :
struct sort_pred { bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; } };
Pour utiliser ce comparateur, transmettez-le simplement à std::sort:
std::sort(v.begin(), v.end(), sort_pred());
Utilisation de C 11 Lambdas
Si vous utilisez un compilateur C 11, vous pouvez exploiter les lambdas dans place d'un comparateur personnalisé :
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; });
Utilisation d'un modèle générique pour le tri par paires
Pour une plus grande flexibilité et réutilisabilité, vous pouvez créer un modèle générique appelé sort_pair_second :
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 réaliser le tri souhaité comme suit :
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!