我想声明一个长按键和长数组作为值的地图,然后填充地图。这是我的代码:
map<long, long[10]> links;
for(long i=0; i<10; i++){
long myarray[10];
links.insert( pair<long, long>(i, myarray) );
}
然而,它不起作用......
答案 0 :(得分:1)
原始数组不能像这样存储在std::map
中,因为原始数组不可复制或可分配。将您的地图声明更改为:
map<long, long(*)[10]> links;
当你进行插入时,请执行:
links.insert( pair<long, long(*)[10]>(i, &myarray) );
虽然这个解决方案有效,但它并不是最好的。对于初学者,您可以使用std::make_pair
:
links.insert( std::make_pair(i, &myarray) );
要进一步改进并删除指针操作,您可以使用std::array
:
map<long, std::array<long, 10>> links;
在你的循环中:
std::array<long, 10> myarray;
links.insert( std::make_pair(i, myarray) );
使用std::array
的优点是它几乎消除了与C样式数组相关的所有问题,例如隐式衰减到指针以及他们不知道自己的大小。< / p>
如果您的目标是简单地创建一个数组10次,那么只需将该地图的索引编入索引以创建一个新数组(links[i]
)。 <{1}}创建一个新密钥,当访问一个尚未存在的密钥时。