将char *类型作为map的key时要谨慎。

原文:http://blog.csdn.net/cwj649956781/article/details/21003863

STL中map的key能否用char *呢?当然可以!

在程序中需要用到一个map,本来是这样写的,

map<char *, int> mapStr;

可想而知,每次放进去的是指针,当查找的时候就出问题了,总是找不到。因为key中存放的是指针,当然找不到了。

需要重载一下操作符,当查找时比较指针对应的字符串就可以了。

修改如下:

struct ptrCmp
{
    bool operator()( const char * s1, const char * s2 ) const
    {
        return strcmp( s1, s2 ) < 0;
    }
};

map<char *, int, ptrCmp> mapStr;

再进行查找就OK了!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 `char*` 作为 `map` 的键时,需要注意以下几点: 1. `char*` 是一个指针类型,需要使用指针比较函数来进行比较,否则默认比较的是指针地址而不是字符串内容。 2. `char*` 类型的键需要手动管理内存,因为 `map` 不会为其分配内存,也不会在键被删除时自动释放内存,需要程序员自行管理。 以下是一个示例代码,用于演示如何使用 `char*` 作为 `map` 的键: ```c++ #include <iostream> #include <map> #include <string.h> struct cmp { bool operator()(const char* a, const char* b) const { return strcmp(a, b) < 0; } }; int main() { std::map<char*, int, cmp> mp; char str1[] = "hello"; char str2[] = "world"; mp[str1] = 1; mp[str2] = 2; auto it = mp.find(str1); if (it != mp.end()) { std::cout << it->second << std::endl; // 输出 1 } return 0; } ``` 在上面的代码中,我们定义了一个结构体 `cmp`,其中重载了 `()` 运算符,用于比较两个 `char*` 类型的键。我们在定义 `map` 时指定了这个比较函数,这样 `map` 就会使用我们自定义的比较函数来比较键的大小了。 在插入键值对时,我们使用了两个 `char` 数组 `str1` 和 `str2` 作为键,并分别对其赋值为 `"hello"` 和 `"world"`。由于 `char` 数组可以隐式转换为 `char*` 类型,因此我们可以直接将 `char` 数组作为 `map` 的键。 需要注意的是,在删除键时需要手动释放相应的内存。在上面的代码中,由于 `char` 数组的内存是在栈上分配的,因此不需要手动释放。如果使用 `malloc` 或 `new` 等动态分配内存的方式来创建 `char*`,则需要在删除键时手动释放相应的内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值