Heim >Backend-Entwicklung >C++ >Wie kann man einen Vektor von Paaren effizient nach dem zweiten Element sortieren?
So sortieren Sie einen Vektor von Paaren effizient nach dem zweiten Element des Paares
Dieser Artikel befasst sich mit der Frage der Sortierung eines Vektors von Paaren basierend auf dem 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 nutzen.
Verwendung von std::sort mit einem benutzerdefinierten Komparator
Ein Ansatz besteht darin, einen benutzerdefinierten Komparator als optionales drittes Argument für std::sort zu verwenden. Dieser benutzerdefinierte Komparator namens sort_pred ist wie folgt definiert:
struct sort_pred { bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; } };
Um diesen Komparator zu verwenden, übergeben Sie ihn einfach an std::sort:
std::sort(v.begin(), v.end(), sort_pred());
Verwenden Sie C 11 Lambdas
Wenn Sie einen C 11-Compiler verwenden, können Sie Lambdas anstelle eines benutzerdefinierten verwenden Vergleicher:
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) { return left.second < right.second; });
Verwenden einer generischen Vorlage für die Paarsortierung
Für mehr Flexibilität und Wiederverwendbarkeit können Sie eine generische Vorlage namens sort_pair_second:
<🎜 erstellen >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); } };Mit dieser Vorlage erreichen Sie die gewünschte Sortierung wie folgt:
Das obige ist der detaillierte Inhalt vonWie kann man einen Vektor von Paaren effizient nach dem zweiten Element sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!