我想创建一个具有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]);
}
答案 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
但这不是你想要的...... 数组与指针几乎相同,因此无法构建数组映射。它只会在检索/设置其值时比较内存中的指针,而不是内容。