地图的键是否可能是数组? (地图数组错误)

时间:2015-09-23 18:12:56

标签: c++ arrays dictionary key

我想创建一个具有int [27]形式的数组的映射作为Keys,所以我尝试了以下内容:

#include <map>
using namespace std;
map<int[27] ,int> mapa;
int n[27];
int main(){
    mapa[n]++;
}

但是我得到一个错误,是因为数组不能用作地图的键类型吗? 在这种情况下我该怎么办?如果我使用向量而不是数组,它会工作吗?

这是建议吗?

#include <cstdio>
#include <map>
using namespace std;
map<array<int,27> ,int> mapa;
int n[27];
int main(){
    mapa[n]++;
}

这是适用的版本:

#include <cstdio>
#include <map>
#include <array>
using namespace std;
map<array<int,27>, int> mapa;
array<int,27> v;
int main(){
    mapa[v]++;
    printf("%d\n",mapa[v]);
}

2 个答案:

答案 0 :(得分:3)

  

但是我收到错误,是因为数组不能成为地图吗?

我认为你实际上是指地图密钥类型。不,原始数组不能用作键,因为没有为它们声明的固有的较少运算符。

  

在这种情况下我该怎么办?如果我使用向量而不是数组,它会工作吗?

是的,您可以使用std::vector<int>作为密钥。更好的是std::array<int,27>,如果你知道它的固定大小是27。

std::less() std::array的{​​{1}}的确切文档可以找到here

另外,您可以提供自己的比较算法,正如@NathanOliver指出的那样。

  

这是建议吗?

#include <cstdio>
#include <map>
using namespace std;
map<array<int,27> ,int> mapa;
int n[27];
int main(){
    mapa[n]++;
}

几乎。你需要

std::array<int,27> n;

当然,没有自动转换。

答案 1 :(得分:0)

这将编译:

map<int *,int> mapa

但这不是你想要的...... 数组与指针几乎相同,因此无法构建数组映射。它只会在检索/设置其值时比较内存中的指针,而不是内容。