如何用char*作为map的key
时间: 2024-03-10 20:49:19 浏览: 132
在使用 `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*`,则需要在删除键时手动释放相应的内存。
阅读全文