Maison >développement back-end >C++ >Comment puis-je utiliser efficacement `char*` comme clés dans un `std::map` C ?
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!