char* 做map 的KEY

13 篇文章 0 订阅

[C++]char* 做map 的KEY

FROM

很明显的道理,不要简单从字面上的东西去理解,虽然char*可以指向字符串,但它毕竟只是一个指针,指针存放的内容只能是地址,请谨记。 而string是一个对象,当传递一个常量字符串(例如"abc")进来时,可以通过string的构造函数自动将该常量字符串转换为一个string对象。 如果把该常量字符串赋值给char*类型,就如同char* p = "abc"; 这个时候p只是一个指向"abc"的首地址的指针而已

 

 

2种修改方式

第一种:

map<std::string, Actor> actorCache; 

第二种:

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

总结:

首先考虑用I,如果确实对性能要求比较高的在考虑II



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值