wie man einen Vektor von Paaren nach dem zweiten Element des Paares effizient sortiert Zweites Element jedes Paares in aufsteigender Reihenfolge. Während das Erstellen eines benutzerdefinierten Funktionsobjekts für diese Aufgabe eine praktikable Lösung ist, gibt es alternative Methoden, die vorhandene STL -Komponenten und std :: less verwenden.
Ein Ansatz besteht darin, einen benutzerdefinierten Komparator als optionales drittes Argument für std :: sortieren zu verwenden. Dieser benutzerdefinierte Vergleich namens Sort_Pred ist wie folgt definiert:struct sort_pred { bool operator () (const std :: pair & lt; int, int & gt; & amp; links, const Rückkehr links.Second & lt; rechts. Sekunde; } };
, um diesen Komparator zu verwenden, geben Sie ihn einfach an std :: sort:
std :: sort (v.ebegin (), v.end (), sort_pred ());
struct sort_pred { bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; } };
Wenn Sie einen C 11 -Compiler verwenden, können Sie nutzen Lambdas anstelle eines benutzerdefinierten Komparators:
std::sort(v.begin(), v.end(), sort_pred());std :: sort (v.begin (), v.end (), [] (const std :: pair & lt; int, int & gt; & amp; links, const std :: pair & lt; int, int & gt; & amp; rechts) { Rückkehr links.Second & lt; rechts. Sekunde; });
Verwenden einer generischen Vorlage für Paare Sortierung
für mehr Flexibilität und Wiederverwendbarkeit können Sie eine generische Vorlage namens Sort_Pair_second:
std::sort(v.begin(), v.end(), sort_pred());erstellen, Vorlage & lt; Klasse T1, Klasse T2, Klasse Pred = std :: weniger & lt; t2 & gt; & gt; struct sort_pair_second { bool operator () (const std :: pair & lt; t1, t2 & gt; & amp; links, const Pred P; return p (links.Second, rechts.sekunden); } };
Mit dieser Vorlage können Sie die gewünschte Sortierung wie folgt erreichen:
std :: sort (v.ebegin (), v.end (), sort_pair_second & lt; int, int & gt; ());Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3