如何在c ++中有效地在地图中创建地图

时间:2014-09-03 02:42:37

标签: c++ map

我总是在c ++中使用多级地图,例如map<int,map<int,map<int,int>>>,但我找不到一种非常有效的方法来更新或创建它。假设我想将一个点(1,2)插入到用于计算点数的地图中,我将执行以下操作:

map<int,map<int,int>> totalmap;
if (totalmap.find(1)==totalmap.end()){
    map<int,int> map1;
    map1[2]=1;
    totalmap[1]=map1;
}
else{
    auto& map1 = totalmap[1];
    if (map1.find(2)==map1.end())
        map1[2]=1;
    else
        map1[2]++;
}

当我需要创建3或4级地图时,我必须编写太多代码。我认为必须有一些比这更好的方法。我能弄清楚的唯一方法是使用multimap将所有键组合为一个,但有时我真的需要逐个查询键。

1 个答案:

答案 0 :(得分:1)

operator[]的{​​{1}}(以及类似容器,集合,多图等等)的工作原理如下:

  • 如果std::map参数不在容器中,则key默认构建会与value一起添加到key(如果是map ,钥匙已添加)并返回。
  • 如果set参数在容器中,则返回key

正如@IgorTandetnik建议的那样,如果你想添加(例如:一个计数器作为两级value的信息),代码totalmap [1] [2] ++将起作用。

  1. maptotalmap[1]中创建一个新元素(键:1,值:map,默认构造,为空)并返回。
  2. map<int, int>{}totalmap[1][2](键:2值:0)中创建一个新元素并返回。
  3. inner map增加totalmap[1][2]++
  4. 的返回值