Heim >Backend-Entwicklung >C++ >Wie verwende ich benutzerdefinierte Schlüsseltypen mit C-STL-Maps?

Wie verwende ich benutzerdefinierte Schlüsseltypen mit C-STL-Maps?

Susan Sarandon
Susan SarandonOriginal
2024-12-24 01:54:10524Durchsuche

How to Use User-Defined Key Types with 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn