In C können wir auf Situationen stoßen, in denen wir einen Vektor von Paaren basierend auf dem zweiten Element sortieren müssen. Lassen Sie uns untersuchen, wie Sie dies mithilfe der bereitgestellten Informationen mühelos erreichen können.
Der bereitgestellte Paarvektor vec enthält Paare von Ganzzahlen und wir möchten ihn in aufsteigender Reihenfolge basierend auf dem zweiten Element jedes Paares sortieren. Ohne auf benutzerdefinierte Funktionsobjekte zurückzugreifen, nutzen wir die Standardvorlagenbibliothek (STL) und std::less, um die Aufgabe zu erledigen.
Die einfachste Lösung in C 14 nutzt Lambdas mit Parametertyp-Inferenz:
std::sort(vec.begin(), vec.end(), [](auto &left, auto &right) { return left.second < right.second; });
Dieses anonyme Lambda erfasst die linken und rechten Paare und gibt true zurück, wenn das zweite Element von left ist kleiner als der von rechts, wodurch der Vektor effektiv in aufsteigender Reihenfolge sortiert wird.
Wenn Lambdas keine Option sind, können wir einen benutzerdefinierten Komparator definieren, um die Sortierung durchzuführen:
struct sort_pred { bool operator()(const std::pair<int, int> &left, const std::pair<int, int> &right) { return left.second < right.second; } }; std::sort(vec.begin(), vec.end(), sort_pred());
Die Struktur sort_pred implementiert den Vergleichsoperator, vergleicht die zweiten Elemente der beiden Paare und gibt „true“ zurück, wenn das Element des linken Paars kleiner als ist rechts.
Um den Komparator zu verallgemeinern und zum Sortieren wiederzuverwenden, können wir eine Vorlage 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 können wir das Jetzt sortieren mit:
std::sort(vec.begin(), vec.end(), sort_pair_second<int, int>());
Durch die Bereitstellung der Vorlagenargumente geben wir die Typen der Paarelemente an und können den Vergleich sogar mithilfe eines anderen anpassen Prädikat wie std::greater für absteigende Reihenfolge.
Das obige ist der detaillierte Inhalt vonWie sortiere ich einen Vektor von Paaren in C basierend auf dem zweiten Element?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!