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

Wie kann ich char* korrekt als Schlüssel in einer C-std::map verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-11 11:37:10548Durchsuche

How Can I Correctly Use char* as Keys in a C   std::map?

Verwendung von char* als Schlüssel in std::map

In C kann es bei der Verwendung von char-Zeigern (char) als Schlüssel in einer std::map. Dies kann auftreten, wenn Sie versuchen, eine Karte mit char-Schlüsseln zu erstellen und auf unerwartetes Verhalten stoßen.

Um dieses Problem zu beheben, ist es wichtig zu verstehen, dass std::map standardmäßig Schlüssel anhand der Zeigeradressen vergleicht. nicht die tatsächlichen Charaktere, die sie darstellen. Dies kann zu falschen Vergleichen und unzuverlässigem Verhalten führen.

Um dieses Problem zu beheben, müssen Sie der Karte einen Vergleichsfunktor bereitstellen. Ein Vergleichsfunktor ist eine Funktion, die definiert, wie Schlüssel verglichen werden. Durch die Verwendung eines Funktors, der die nullterminierten Zeichenfolgen vergleicht, auf die die char*-Zeiger zeigen, können Sie sicherstellen, dass die Karte Elemente basierend auf ihren Zeichenfolgenwerten korrekt anordnet und abruft.

Hier ist ein Beispiel für die Definition von a Vergleichsfunktor für char*-Schlüssel:

struct cmp_str
{
   bool operator()(char const *a, char const *b) const
   {
      return std::strcmp(a, b) < 0;
   }
};
Sobald Sie den Vergleichsfunktor definiert haben, können Sie ihn als dritten Vorlagenparameter an übergeben std::map. Dadurch wird die Karte gezwungen, den Funktor zum Vergleichen von Schlüsseln zu verwenden:

map<char *, int, cmp_str> BlahBlah;
Durch die Bereitstellung eines Vergleichsfunktors weisen Sie die Karte an, die tatsächlichen Zeichenfolgen zu vergleichen, auf die die char*-Schlüssel verweisen, um eine korrekte Sortierung und einen korrekten Abruf sicherzustellen von Elementen basierend auf ihren String-Werten.

Das obige ist der detaillierte Inhalt vonWie kann ich char* korrekt als Schlüssel in einer C-std::map verwenden?. 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