Maison >développement back-end >C++ >Comment puis-je utiliser correctement char* comme clés dans un std::map C ?

Comment puis-je utiliser correctement char* comme clés dans un std::map C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-11 11:37:10551parcourir

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

Utilisation de char* comme clé dans std::map

En C , vous pouvez rencontrer un problème lors de l'utilisation de pointeurs char (char) comme clés dans un std::map. Cela peut se produire lorsque vous tentez de créer une carte à l'aide de clés char et que vous rencontrez un comportement inattendu.

Pour résoudre ce problème, il est important de comprendre que par défaut, std::map compare les clés en utilisant les adresses des pointeurs, pas les personnages réels qu'ils représentent. Cela peut conduire à des comparaisons incorrectes et à un comportement peu fiable.

Pour résoudre ce problème, vous devez fournir un foncteur de comparaison à la carte. Un foncteur de comparaison est une fonction qui définit comment comparer les clés. En utilisant un foncteur qui compare les chaînes terminées par un caractère nul pointées par les pointeurs char*, vous pouvez vous assurer que la carte ordonne et récupère correctement les éléments en fonction de leurs valeurs de chaîne.

Voici un exemple de la façon de définir un foncteur de comparaison pour les clés char* :

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

Une fois que vous avez défini le foncteur de comparaison, vous pouvez le transmettre comme troisième paramètre de modèle au std :: carte. Cela forcera la carte à utiliser le foncteur pour comparer les clés :

map<char *, int, cmp_str> BlahBlah;

En fournissant un foncteur de comparaison, vous demandez à la carte de comparer les chaînes réelles pointées par les clés char*, garantissant ainsi un tri et une récupération corrects. d'éléments en fonction de leurs valeurs de chaîne.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn