有效地使用 char* 作为 std::map 键
在 C 中,使用 char* 作为 std::map 中的键可以构成挑战。考虑以下尝试查找未使用的玩家名称的代码片段:
std::map<char*, int> g_PlayerNames; int PlayerManager::CreateFakePlayer() { // ... for(std::map<char*, int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it) { // ... } // ... }
此代码可能无法按预期运行,因为 std::map 中 char* 的默认比较是比较指针本身,而不是实际的指针它们指向的以 null 结尾的字符串。
解决方案
要解决此问题,您必须为地图提供比较函子。该函子应该比较 char* 键指向的字符串。下面是一个示例:
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;
通过合并 cmp_str 函子,映射现在会比较实际的字符串,从而允许预期的逻辑正确运行。
请记住,此技术适用于以下情况的任何场景:您打算使用指针作为 std::map 中的键。通过提供比较函子,您可以确保映射按需要运行,比较指针表示的实际值。
以上是如何在 C `std::map` 中有效地使用 `char*` 作为键?的详细内容。更多信息请关注PHP中文网其他相关文章!