如何在c ++中将数组作为值插入到map中?

时间:2018-02-24 17:19:26

标签: c++ arrays dictionary

我想声明一个长按键和长数组作为值的地图,然后填充地图。这是我的代码:

map<long, long[10]> links;

for(long i=0; i<10; i++){
    long myarray[10];
    links.insert( pair<long, long>(i, myarray) );
}

然而,它不起作用......

1 个答案:

答案 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}}创建一个新密钥,当访问一个尚未存在的密钥时。