用insert运算符填充嵌套的std :: map

时间:2014-05-05 14:15:30

标签: map insert nested

我有以下代码:

#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对象,所以我没有这样做。

1 个答案:

答案 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

但我相信如果存在键10aaa,则地图中不会插入任何元素。我建议你仔细阅读文档并测试预期的行为。