Sortieren von Vektoren von Paaren basierend auf zweiten Elementen
Gegeben ein Vektor von Paaren, möchte man sie möglicherweise in aufsteigender Reihenfolge basierend auf ihren Elementen anordnen zweite Elemente. Während das Erstellen benutzerdefinierter Funktionsobjekte diese Aufgabe erfüllt, wollen wir untersuchen, ob die Standard Template Library (STL) uns bequemere Methoden bietet.
Verwendung eines benutzerdefinierten Komparators
Der dritte Der Parameter von std::sort ermöglicht die Angabe einer benutzerdefinierten Komparatorfunktion. Wir können eines wie folgt definieren:
struct sort_pred { bool operator()(const std::pair<int, int>& left, const std::pair<int, int>& right) { return left.second < right.second; } }; std::sort(v.begin(), v.end(), sort_pred());
Verwendung von Lambdas in C 11 und höher
In C 11 und späteren Versionen bieten Lambdas eine kompakte Alternative:
std::sort(v.begin(), v.end(), [](const std::pair<int, int>& left, const std::pair<int, int>& right) { return left.second < right.second; });
Nutzung von Vorlagen für Flexibilität
Für eine erhöhte Wiederverwendbarkeit kann man einen vorlagenbasierten Komparator definieren:
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); } };
Dies ermöglicht eine noch größere Flexibilität:
std::sort(v.begin(), v.end(), sort_pair_second<int, int>());
Das obige ist der detaillierte Inhalt vonWie sortiere ich Vektoren von Paaren basierend auf ihren zweiten Elementen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!