Heim >Backend-Entwicklung >C++ >Kann jede Klasse als Schlüssel für std::map dienen?

Kann jede Klasse als Schlüssel für std::map dienen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-26 08:05:11259Durchsuche

Can Any Class Serve as a Key for std::map?

Schlüssel für std::map: Anforderungen und Implementierung

Bei der Verwendung von std::map zum Zuordnen von Objekten verschiedener Klassen wird die Klasse, die Sie verwenden als Schlüssel verwenden möchten, erfüllen möglicherweise nicht die erforderlichen Anforderungen an gültige Schlüssel. std::map organisiert seinen Inhalt mithilfe eines Ordnungsmechanismus, was die Frage aufwirft, ob eine beliebige Klasse als Schlüssel dienen kann oder ob bestimmte Anforderungen bestehen.

Der Schlüssel für std::map muss Folgendes einhalten Anforderungen:

  • Kopierbarkeit und Zuweisbarkeit: Die Schlüsselklasse muss kopierbar sein und zugewiesen.

Die Reihenfolge der Karte wird durch das dritte Vorlagenargument oder das Konstruktorargument gesteuert, das standardmäßig std::less ist. Standardmäßig ist std::less nutzt die < Operator. Sie haben jedoch die Flexibilität, Ihren eigenen Vergleichsoperator zu definieren:

struct CmpMyType
{
    bool operator()( MyType const&amp; lhs, MyType const&amp; rhs ) const
    {
        // Implementation of comparison logic
    }
};

Stellen Sie sicher, dass Ihr Vergleichsoperator eine strikte Reihenfolge definiert. Wenn CmpMyType()( a, b ) true zurückgibt, muss CmpMyType()( b, a ) false zurückgeben. Wenn beide „false“ zurückgeben, gelten die Elemente als äquivalent und gehören zur gleichen Äquivalenzklasse.

Das obige ist der detaillierte Inhalt vonKann jede Klasse als Schlüssel für std::map dienen?. 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