c++ map 数组作为key operator
时间: 2023-07-01 19:21:37 浏览: 172
要让数组作为map的key,需要定义一个数组的比较运算函数,并在map的定义中指定该运算函数。具体实现可以参考以下示例代码:
```cpp
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
const int N = 3;
bool cmp(int* a, int* b) {
for (int i = 0; i < N; ++i) {
if (a[i] != b[i]) {
return a[i] < b[i];
}
}
return false;
}
int main() {
map<int*, int, decltype(cmp)*> arr_map(cmp);
int arr1[N] = {1, 2, 3};
int arr2[N] = {4, 5, 6};
// 添加元素
arr_map[&arr1[0]] = 10;
arr_map[&arr2[0]] = 20;
// 遍历元素
for (auto iter = arr_map.begin(); iter != arr_map.end(); ++iter) {
int *p = iter->first;
for (int i = 0; i < N; ++i) {
cout << p[i] << " ";
}
cout << "value: " << iter->second << endl;
}
return 0;
}
```
在上述代码中,我们定义了一个`int`类型的数组作为key,使用map容器将其作为key,并将int类型的数值作为value。我们定义了一个比较运算函数`cmp`,并使用`decltype`关键字来获取运算函数的类型,并在map的定义中指定该运算函数。我们可以通过`[]`来添加元素,也可以使用迭代器遍历map并输出元素。
需要注意的是,数组作为key时,数组的地址会被作为key。因此,在遍历元素时,需要使用`int*`类型的指针来访问数组元素。
阅读全文