Verwenden des benutzerdefinierten std::set Comparators
Einführung:
In Sortier- und Suchalgorithmen werden benutzerdefinierte Komparatoren verwendet, um eine alternative Reihenfolge für Elemente in einem Container anzugeben. Dies ermöglicht eine individuelle Sortierung oder Suche nach bestimmten Kriterien. Lassen Sie uns untersuchen, wie Sie einen benutzerdefinierten Komparator für den std::set-Container definieren.
Fallstudie:
Stellen Sie sich eine Menge von Ganzzahlen vor, bei der Sie eine lexikografische statt einer numerischen Reihenfolge wünschen Bestellung. Dies bedeutet, dass die Elemente „1234“ und „10000“ als in Ordnung (lexikographisch) behandelt werden sollten, auch wenn „10000“ numerisch größer ist.
Fehler und Lösung:
Der Fehler, auf den Sie gestoßen sind, liegt daran, dass g einen Komparator erwartet, der einer bestimmten Vorlagenparameterliste entspricht, insbesondere „template
Lösung:
Es gibt mehrere Möglichkeiten, einen benutzerdefinierten Komparator für std zu definieren ::set:
1. Moderne C 20-Lösung:
In C 20 und höher können Sie Lambda-Funktionen direkt als Komparatoren verwenden:
auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s;
2. Moderne C 11-Lösung:
In C 11 und höher können Sie eine Lambda-Funktion mit dem Mengenkonstruktor verwenden:
auto cmp = [](int a, int b) { return a < b; }; // Arbitrary example std::set<int, decltype(cmp)> s(cmp);
3. Funktionsobjekt:
Sie können ein Funktionsobjekt mit einer Operator()-Funktion definieren, die einen booleschen Wert zurückgibt:
struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; std::set<int, Compare> s;
4. std::integral_constant:
Sie können std::integral_constant verwenden, um einen Typ zu erstellen, der implizit in einen Funktionszeiger konvertiert:
#include <type_traits> struct Compare { bool operator()(const int &a, const int &b) { return a < b; } // Arbitrary example }; using Cmp = std::integral_constant<decltype(&Compare::operator()), &Compare::operator()>; std::set<int, Cmp> s;
Schlussfolgerung:
Durch die Definition eines benutzerdefinierten Komparators haben Sie mehr Kontrolle über die Reihenfolge der Elemente in Ihrem Satz Sie können spezifische Sortieranforderungen erfüllen.
Das obige ist der detaillierte Inhalt vonWie definiere ich einen benutzerdefinierten Komparator für den std::set-Container?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!