Heim >Backend-Entwicklung >C++ >Wie kann ich benutzerdefinierte Typen als Schlüssel in std::maps in C verwenden?
Hindernisse überwinden: Verwendung von std::maps mit benutzerdefinierten Typen als Schlüssel
Im Bereich der Zuordnung von Schlüssel-Wert-Paaren in C , kommt es nicht selten vor, dass benutzerdefinierte Typen zum Definieren von Schlüsseln bevorzugt werden. Beim Versuch, std::maps mit benutzerdefinierten Schlüsseln zu verwenden, kann es jedoch während der Kompilierung zu einer kryptischen Fehlermeldung kommen. Um diesen Fehler und seine Bedeutung zu verstehen, schauen wir uns die Nuancen von std::maps und benutzerdefinierten Typen an.
Bei der Arbeit mit std::maps verlassen wir uns oft auf primitive Typen als Schlüssel, wie zum Beispiel Ganzzahlen oder Saiten. Primitive Typen verfügen über klar definierte Vergleichsoperatoren (<, >, == usw.), die eine effiziente Schlüsselreihenfolge innerhalb der Karte ermöglichen. Bei der Verwendung benutzerdefinierter Typen als Schlüssel ist jedoch zu beachten, dass die Implementierung dieser Vergleichsoperatoren für das korrekte Funktionieren der Karte von entscheidender Bedeutung ist. Hier kommt die Fehlermeldung ins Spiel, auf die Sie gestoßen sind.
Der in der Frage erwähnte Fehler deutet auf das Fehlen eines Operators hin< Implementierung für die benutzerdefinierte Klasse1. Standardmäßig verlässt sich std::maps auf die Methode less<> Vorlage zum Vergleichen von Schlüsseln. weniger<> ruft intern den Operator< für den Schlüsseltyp definiert. Leider fehlt dieser Operator in Klasse1, was zu einem Kompilierungsfehler führt.
Um dieses Problem zu beheben, gibt es mehrere praktikable Lösungen:
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <ol start="3"><li> <strong>Specializing std::less:</strong> Wenn die Vergleichssemantik für Ihre Verwendung nicht entscheidend ist In diesem Fall sollten Sie erwägen, die Vorlage „std::less“ auf Klasse 1 zu spezialisieren. Mit diesem Ansatz können die Vergleichskriterien außerhalb des Bereichs von Klasse 1 definiert werden, wodurch der Code erweiterbarer wird.</li></ol> <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 Verwendung eines dieser Ansätze können Sie den Fehler beheben und std erfolgreich nutzen: :maps mit benutzerdefinierten Typen als Schlüssel. Es ist wichtig, die Lösung zu wählen, die am besten zu den Anforderungen und Designprinzipien Ihres Projekts passt.
Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Typen als Schlüssel in std::maps in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!