Komparatoren für Karten anpassen
In C verwendet std::map einen Komparator, um seine Elemente zu ordnen. Standardmäßig verwenden Karten den Kleiner-als-Operator (<), um Schlüssel zu vergleichen. Es ist jedoch möglich, dieses Standardverhalten zu überschreiben, indem Sie einen benutzerdefinierten Komparator bereitstellen.
In dieser Frage wird erläutert, wie Sie den Komparator für eine Karte anpassen, um Schlüssel nach ihrer Länge statt alphabetisch zu sortieren. Hier ist die Lösung:
Lösung mit einer benutzerdefinierten Klasse
std::map ermöglicht bis zu vier Vorlagentypargumente, wobei das dritte ein Komparator ist. Hier ist ein Beispiel einer benutzerdefinierten Klasse, die einen Komparator basierend auf der Zeichenfolgenlänge implementiert:
<code class="cpp">struct cmpByStringLength { bool operator()(const std::string& a, const std::string& b) const { return a.length() < b.length(); } };
Um diesen benutzerdefinierten Komparator zu verwenden, erstellen Sie eine Karte mit den folgenden Vorlagenargumenten:
<code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap;</p> <p><strong>Lösung mit Konstruktorargument</strong></p> <p>Alternativ können Sie einen Komparator an den Konstruktor der Karte übergeben. Diese Syntax entspricht dem vorherigen Beispiel:</p> <pre class="brush:php;toolbar:false"><code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap(cmpByStringLength());</code>
Hinweis: Beim Vergleich nach Länge darf in der Karte nur eine Zeichenfolge jeder Länge als Schlüssel vorhanden sein.
Das obige ist der detaillierte Inhalt vonWie kann ich den Komparator für eine Karte in C anpassen, um Schlüssel nach ihrer Länge zu sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!