Heim >Backend-Entwicklung >C++ >Welche Schlüsselanforderungen muss eine Klasse erfüllen, um als Schlüssel in einer „std::map' verwendet zu werden?

Welche Schlüsselanforderungen muss eine Klasse erfüllen, um als Schlüssel in einer „std::map' verwendet zu werden?

Susan Sarandon
Susan SarandonOriginal
2024-12-02 01:29:09781Durchsuche

What Key Requirements Must a Class Meet to Be Used as a Key in a `std::map`?

Schlüsselanforderungen für std::map

Damit eine Klasse ein gültiger Schlüssel in einer Standardbibliothek std::map ist, Es muss bestimmte Anforderungen erfüllen. Diese Anforderungen stellen sicher, dass Schlüssel innerhalb der Karte zuverlässig bestellt und verglichen werden können.

  • Kopierbarkeit und Zuweisbarkeit:Schlüssel müssen kopierbar und zuweisbar sein. Dadurch kann std::map Kopien von Schlüsseln zum Vergleich und zur internen Speicherung erstellen.
  • Vergleichsoperator: Schlüssel müssen einen Vergleichsoperator implementieren, der normalerweise als < implementiert ist. (kleiner als) oder > (größer als) Operator. Mit diesem Operator kann std::map die relative Reihenfolge der Schlüssel bestimmen, was für die Aufrechterhaltung der Sortierung der Karte unerlässlich ist.
  • Strikte Reihenfolge: Der Vergleichsoperator muss eine strikte Reihenfolge definieren . Für zwei Schlüssel a und b, wenn a < b, dann b > A. Wenn ein < b und b < c, dann a < c muss ebenfalls gelten.

Benutzerdefinierte Schlüsselimplementierung

Wenn die Klasse, die Sie als Schlüssel verwenden möchten, diese Anforderungen nicht erfüllt, können Sie eine erstellen Wrapper-Klasse, die von der Originalklasse erbt und die erforderlichen Operatoren implementiert. Dies ist nützlich, wenn die ursprüngliche Klasse nicht geändert werden kann oder keinen geeigneten Vergleichsoperator bereitstellt.

Das Folgende ist ein Beispiel für einen benutzerdefinierten Schlüssel-Wrapper, der einen Vergleichsoperator für eine einfache Struktur implementiert:

struct MyType {
    // ... original class members
};

struct MyTypeWrapper {
    MyType original;

    bool operator<(const MyTypeWrapper& other) const {
        // ... custom comparison logic
    }
};

Durch die Verwendung von MyTypeWrapper als Schlüssel können Sie Objekte der MyType-Klasse zuordnen und gleichzeitig sicherstellen, dass die Reihenfolge der Zuordnung korrekt beibehalten wird.

Das obige ist der detaillierte Inhalt vonWelche Schlüsselanforderungen muss eine Klasse erfüllen, um als Schlüssel in einer „std::map' verwendet zu werden?. 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