Heim > Backend-Entwicklung > C++ > Wie sortiere ich einen Vektor von Paaren in C basierend auf dem zweiten Element?

Wie sortiere ich einen Vektor von Paaren in C basierend auf dem zweiten Element?

Linda Hamilton
Freigeben: 2024-12-16 21:31:12
Original
1003 Leute haben es durchsucht

How to Sort a Vector of Pairs in C   Based on the Second Element?

Sortieren eines Vektors von Paaren basierend auf dem zweiten Element

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.

Verwendung von C 14-Lambdas

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;
});
Nach dem Login kopieren

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.

Benutzerdefinierte Komparatoren verwenden

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());
Nach dem Login kopieren

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.

Verwenden eines Vorlagenkomparators

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);
    }
};
Nach dem Login kopieren

Mit dieser Vorlage können wir das Jetzt sortieren mit:

std::sort(vec.begin(), vec.end(), sort_pair_second<int, int>());
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage