从数组映射到整数在C++中无法正常工作

map from array to integer not working properly in C++

本文关键字:常工作 工作 映射 数组 整数 C++      更新时间:2023-10-16

我有一个代码,它使用从数组到整数的映射,但它不能正常工作。

#include <iostream>
#include <map>
using namespace std;
int main() {
    map <int*, int> abcd;
    int a[2], b[2];
    a[0]= 2;
    a[1]= 3;
    abcd[a]=1;
    b[0]= 2;
    b[1]= 3;
    cout<<abcd[b];
    return 0;
}

请注意,这里的数组 a 和 b 相等,因此 abcd[b] 应等于 1。但输出为 0。为什么会这样?我该如何解决这个问题?

提前感谢,对不起英语不好。

您的映射存储的是int*键,而不是数组。 如果要存储数组,请尝试std::array<int,2>是否总是有 2 个元素,或者如果它变化,std::vector<int>......

因为您存储的是指针,所以abcd[a]=1实际上是在说"如果我再次使用 a[] 的地址进行索引,请找到1的值。 abcd[b]寻找不同的键&b,如果它们是不同地址的不同变量,则永远不会等于&a。 指针键与数组内容无关;这样做的另一个结果是,如果您更改a[]中的值并查找abcd[a]您仍然会找到1....

map <int*, int>使用比较器来比较指针而不是值,即使ab的内容相同,它们指向不同的内存位置,因此是映射的不同键。

在这种情况下,唯一键的默认值为 0(值初始化的 int),因此abcd[b]显示0