Using char* Effectively as std::map Keys
In C , using char* as a key in std::map can pose challenges. Consider the following code snippet that attempts to find an unused player name:
std::map<char*, int> g_PlayerNames; int PlayerManager::CreateFakePlayer() { // ... for(std::map<char*, int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it) { // ... } // ... }
This code may not function as intended because the default comparison for char* within std::map compares the pointers themselves, not the actual null-terminated strings they point to.
Resolution
To address this issue, you must provide a comparison functor to the map. This functor should compare the strings pointed to by the char* keys. Here's an example:
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;
By incorporating the cmp_str functor, the map now compares the actual strings, allowing the intended logic to operate correctly.
Remember, this technique applies to any scenario where you intend to use pointers as keys in std::map. By providing a comparison functor, you ensure that the map operates as desired, comparing the actual values represented by the pointers.
The above is the detailed content of How Can I Use `char*` Effectively as Keys in a C `std::map`?. For more information, please follow other related articles on the PHP Chinese website!