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

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

DDD
DDDOriginal
2024-12-13 12:12:10504Durchsuche

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

Benutzerdefinierte Sortierung von Vektoren von Paaren

Stellen Sie sich das Szenario vor, in dem Sie einen Vektor von Paaren sortieren möchten (

std:: vector<std::pair<int, int>>
) basierend auf dem jeweils zweiten Element Paar in aufsteigender Reihenfolge.

Um dies zu erreichen, ohne ein separates Funktionsobjekt zu implementieren, können Sie den dritten Parameter von

std::sort
verwenden, der einen benutzerdefinierten Komparator akzeptiert. Dieser Komparator vergleicht zwei Paare basierend auf ihren zweiten Elementen mithilfe des bereitgestellten Komparators.

Mit einem C 11-Compiler können Sie beispielsweise einen Komparator mit einem Lambda-Ausdruck definieren:

std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) {
    return left.second < right.second;
});

Alternativ , definieren Sie eine benutzerdefinierte Struktur, die den

operator()
überlädt. Funktion zum Durchführen des Vergleichs:

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

Wenn Sie eine generische Lösung wünschen, die mit verschiedenen Typen und Komparatoren wiederverwendet werden kann, erstellen Sie eine Vorlage wie diese:

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 Sie können Paare mit jedem benutzerdefinierten Komparator sortieren:

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());

Das obige ist der detaillierte Inhalt vonWie sortiere ich einen Vektor von Paaren basierend auf dem zweiten Element in C individuell?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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