我有以下代码:
#include <iostream>
#include <utility>
#include <map>
using namespace std;
int main()
{
map<int, map<string, int> > mapa;
// way A
mapa[10]["aaa"] = 20;
// way B -> Compilation Error
pair<int, pair<string, int> > par(10, make_pair("aaa", 20));
mapa.insert(par);
return 0;
}
我知道&#34;方式A&#34;填充地图的工作原理。 我想用&#34;方式B&#34;但它抛出一个编译错误: 错误:没有匹配函数来调用'std :: map,int&gt; :: map(const std :: pair,int&gt;&amp;)'
如何使用insert运算符填充嵌套映射。
Pd:我没有使用[]运算符,因为它需要定义默认构造函数,因为我使用的是来自Boost的time_period对象,所以我没有这样做。
答案 0 :(得分:0)
您的地图类型是map of (int -> map of (string -> int))
,但您正在尝试插入map of (int -> pair (string, int))
类型的条目。 pair
不是map
,因此是错误。
修改强>:
根据the documentation,对地图[]
运算符的调用相当于一系列其他操作:
mapped_type&安培; operator [](const key_type&amp; k);
对此功能的调用相当于:
(*((这 - &GT;插入(make_pair(K,mapped_type())))第一))。第二
所以在你的情况下,电话mapa[10]["aaa"] = 20;
相当于:
(*(( (*((mapa.insert(make_pair(10,map<string, int>()))).first)).second
.insert(make_pair("aaa",20))).first)).second
但我相信如果存在键10
或aaa
,则地图中不会插入任何元素。我建议你仔细阅读文档并测试预期的行为。