Comment trier efficacement un vecteur de paires par le deuxième élément de la paire
Cet article aborde la question du tri d'un vecteur de paires basé sur le Deuxième élément de chaque paire dans l'ordre croissant. Bien que la création d'un objet de fonction personnalisé pour cette tâche soit une solution viable, il existe d'autres méthodes qui utilisent les composants STL existants et std :: moins.
Utilisation de std :: Trier avec un comparateur personnalisé
Une approche consiste à utiliser un comparateur personnalisé en tant que troisième argument facultatif à STD :: Srieur. 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, passez-le simplement à std :: tri:
std::sort(v.begin(), v.end(), sort_pred());
en utilisant c 11 lambdas
Si vous utilisez un compilateur C 11, vous pouvez tirer parti Lambdas à la 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; });
en utilisant un modèle générique pour le tri des 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>());
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3