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::sortverwenden, 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!