Heim > Backend-Entwicklung > C++ > Wie kann ich Zeiger als Schlüssel in einer std::map korrekt verwenden?

Wie kann ich Zeiger als Schlüssel in einer std::map korrekt verwenden?

Barbara Streisand
Freigeben: 2024-12-10 17:11:14
Original
658 Leute haben es durchsucht

How Can I Use Pointers as Keys in a std::map Correctly?

Zeiger als Schlüssel in std::map verwenden

Bei der Verwendung von Zeigern als Schlüssel in einer std::map ist es wichtig, a anzugeben Vergleichsfunktor, um Vergleiche basierend auf den gezeigten Werten und nicht auf den Zeigern zu ermöglichen selbst.

Problem:

Im bereitgestellten Code-Snippet verwenden Sie std::map, int> g_PlayerNames. Ohne Angabe eines Vergleichsfunktors vergleicht die Karte char-Zeiger, die auf unterschiedliche Speicherorte verweisen können, selbst wenn sie auf dieselbe nullterminierte Zeichenfolge verweisen.

Lösung:

Um dieses Problem zu beheben, verwenden Sie eine Vergleichsfunktion, die die nullterminierten Zeichenfolgen vergleicht, auf die die char*-Schlüssel verweisen. Hier ist ein Beispiel:

struct cmp_str {
  bool operator()(char const *a, char const *b) const {
    return std::strcmp(a, b) < 0;
  }
};

std::map<char *, int, cmp_str> g_PlayerNames;
Nach dem Login kopieren

In diesem Beispiel definiert die cmp_str-Struktur eine Operator()-Funktion, die die gezeigten Zeichenfolgen mit std::strcmp vergleicht. Dadurch wird sichergestellt, dass die Zuordnungsschlüssel anhand ihrer Zeichenfolgenwerte und nicht anhand ihrer Zeigerwerte verglichen werden. Durch die Verwendung dieses Vergleichsfunktors können Sie die Karte basierend auf den zugrunde liegenden nullterminierten Zeichenfolgen korrekt manipulieren.

Das obige ist der detaillierte Inhalt vonWie kann ich Zeiger als Schlüssel in einer std::map korrekt verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage