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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-12-23 17:52:14433parcourir

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

Utiliser char* efficacement comme clés std::map

En C, utiliser char* comme clé dans std::map peut poser défis. Considérez l'extrait de code suivant qui tente de trouver un nom de joueur inutilisé :

std::map<char*, int> g_PlayerNames;

int PlayerManager::CreateFakePlayer()
{
    // ...
    for(std::map<char*, int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it)
    {
        // ...
    }
    // ...
}

Ce code peut ne pas fonctionner comme prévu car la comparaison par défaut pour char* dans std::map compare les pointeurs eux-mêmes, et non les pointeurs réels. chaînes terminées par un caractère nul vers lesquelles ils pointent.

Résolution

Pour résoudre ce problème, vous devez fournir un foncteur de comparaison à la carte. Ce foncteur doit comparer les chaînes pointées par les touches char*. Voici un exemple :

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

map<char *, int, cmp_str> g_PlayerNames;

En incorporant le foncteur cmp_str, la carte compare désormais les chaînes réelles, permettant à la logique prévue de fonctionner correctement.

N'oubliez pas que cette technique s'applique à tout scénario dans lequel vous avez l'intention d'utiliser des pointeurs comme clés dans std :: map. En fournissant un foncteur de comparaison, vous vous assurez que la carte fonctionne comme souhaité, en comparant les valeurs réelles représentées par les pointeurs.

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