„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man einen Paarpaare effizient nach dem zweiten Element sortieren?

Wie kann man einen Paarpaare effizient nach dem zweiten Element sortieren?

Gepostet am 2025-02-26
Durchsuche:243

How to Efficiently Sort a Vector of Pairs by the Second Element?

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; ());

Neuestes Tutorial Mehr>

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