Heim >Backend-Entwicklung >C++ >Wie verwende ich benutzerdefinierte Schlüsseltypen mit C-STL-Maps?
STL-Karten mit benutzerdefinierten Schlüsseltypen verstehen
In C bieten STL-Karten eine leistungsstarke Datenstruktur zum Organisieren von Daten basierend auf eindeutigen Schlüsseln . Die Verwendung von Karten mit benutzerdefinierten Typen kann jedoch zu Kompilierungsfehlern führen.
Ursache: Fehlender Vergleichsoperator
Die Fehlermeldung hebt das Fehlen des überladenen weniger- als Operator (<) für die benutzerdefinierte Klasse Class1. Standardmäßig erwartet die std::map, dass ihre Schlüssel mithilfe des Operators < vergleichbar sind, was erforderlich ist, damit die Karte effiziente Suchvorgänge und Sortierungen durchführen kann.
Auflösung mit benutzerdefinierten Komparatoren
Um dieses Problem zu beheben, können Sie eine benutzerdefinierte Komparatorklasse erstellen, die die Vergleichslogik für Objekte der Klasse 1 definiert. Zum Beispiel:
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <p>Hier stellt die Class1Compare-Klasse die Implementierung zum Vergleichen von Class1-Objekten basierend auf ihren ID-Werten bereit.</p> <p><strong>Alternative: Spezialisierung auf std::less</strong></p> <p>Alternativ können Sie die std::less-Vorlage für Klasse1 spezialisieren Objekte:</p> <pre class="brush:php;toolbar:false">namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }
Durch die Spezialisierung von std::less stellen Sie eine spezifische Vergleichslogik für Objekte der Klasse 1 bereit und minimieren gleichzeitig die Codekomplexität.
Das obige ist der detaillierte Inhalt vonWie verwende ich benutzerdefinierte Schlüsseltypen mit C-STL-Maps?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!