In C Beim Programmieren kommt es bei der Verwendung von STL-Maps mit benutzerdefinierten Klassen häufig zu kryptischen Compilerfehlern. Insbesondere wird die Fehlermeldung „Keine Übereinstimmung für ‚Operator<‘“ angezeigt. in '__x < __y'" kommt häufig vor, wenn versucht wird, mit einem Schlüssel eines benutzerdefinierten Typs auf ein Element zuzugreifen.
Die Fehlermeldung deutet darauf hin, dass der Compiler nicht in der Lage ist um den Operator < zu finden zum Vergleich zweier Instanzen des benutzerdefinierten Typs. Dies liegt daran, dass STL-Karten standardmäßig einen Vergleichsoperator (Operator<) benötigen, um ihre Schlüssel zu ordnen. Beim Arbeiten mit benutzerdefinierten Typen ist dieser Operator jedoch nicht automatisch verfügbar.
Anstatt den Operator< Für einen benutzerdefinierten Typ kann man eine Komparatorfunktionsobjektklasse erstellen. Diese Klasse implementiert eine spezielle Version von „operator()“, die die relative Reihenfolge des benutzerdefinierten Typs bestimmt. Die Karte kann dann spezialisiert werden, um diesen Komparator zu verwenden:
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <h3>Lösung 2: Spezialisieren von std::less</h3> <p>Eine andere Alternative besteht darin, die std::less-Vorlage für die benutzerdefinierten zu spezialisieren Typ. Dies stellt eine benutzerdefinierte Definition für „operator()“ innerhalb der Klasse „std::less“ bereit:</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; } }; }
Dieser Ansatz ermöglicht es der Karte, zum Vergleich standardmäßig „std::less“ zu verwenden, während gleichzeitig eine spezifische Implementierung für den Benutzer bereitgestellt wird. definierter Typ.
Bei der Arbeit mit STL-Maps und benutzerdefinierten Typen ist es wichtig, eine Methode zum Vergleichen der Schlüssel bereitzustellen. Dies kann entweder durch ein Komparatorfunktionsobjekt oder durch Spezialisierung auf std::less erreicht werden. Durch die Erfüllung dieser Anforderung können Entwickler Karten mit benutzerdefinierten Typen als Schlüssel effektiv nutzen.
Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Typen als Schlüssel in C std::maps verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!