Anpassen von Komparatoren für den Kartenschlüsselvergleich
Bei der Arbeit mit Karten kann die Wahl des Schlüsselkomparators erhebliche Auswirkungen auf das Verhalten der Sammlung haben. In STL-Maps vergleicht der Standardkomparator Schlüssel anhand ihrer natürlichen Reihenfolge. Es ist jedoch möglich, diese Standardeinstellung zu überschreiben und einen benutzerdefinierten Komparator für Schlüsselvergleiche anzugeben.
Benutzerdefinierte Komparatoren erstellen
Um einen benutzerdefinierten Komparator zu definieren, erstellen Sie eine Klasse oder Struktur das die Funktion „operator()“ implementiert. Diese Funktion benötigt zwei Argumente, die die zu vergleichenden Schlüssel darstellen, und gibt einen booleschen Wert zurück, der das Vergleichsergebnis angibt. Um beispielsweise Schlüssel anhand ihrer Zeichenfolgenlänge zu vergleichen, können Sie den folgenden Komparator erstellen:
<code class="cpp">struct cmpByStringLength { bool operator()(const std::string& a, const std::string& b) const { return a.length() < b.length(); } };
Benutzerdefinierte Komparatoren in Karten verwenden
Sobald Sie einen benutzerdefinierten Komparator haben , können Sie damit eine Karte initialisieren, indem Sie sie als drittes Vorlagenargument übergeben:
<code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap;</code>
Alternativ können Sie den Komparator auch an den Konstruktor der Karte übergeben:
<code class="cpp">std::map<std::string, std::string> myMap(std::less<std::string>(), cmpByStringLength());</code>
Andere Sortieroptionen
Während die Verwendung benutzerdefinierter Komparatoren Flexibilität bietet, ist es erwähnenswert, dass die Verwendung eines benutzerdefinierten Komparators basierend auf der Länge Ihre Fähigkeit, mehrere Schlüssel mit derselben Länge zu haben, einschränken kann. Wenn Sie komplexere Sortiermechanismen benötigen, sollten Sie die Verwendung einer alternativen Datenstruktur wie Boost.MultiIndex oder einer externen Sortierbibliothek in Betracht ziehen.
Das obige ist der detaillierte Inhalt vonWie können Sie Schlüsselvergleiche in STL-Karten anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!