首页 > 后端开发 > C++ > 如何在 C `std::map` 中有效地使用 `char*` 作为键?

如何在 C `std::map` 中有效地使用 `char*` 作为键?

Patricia Arquette
发布: 2024-12-23 17:52:14
原创
382 人浏览过

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

有效地使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板