我总是在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将所有键组合为一个,但有时我真的需要逐个查询键。
答案 0 :(得分:1)
operator[]
的{{1}}(以及类似容器,集合,多图等等)的工作原理如下:
std::map
参数不在容器中,则key
默认构建会与value
一起添加到key
(如果是map
,钥匙已添加)并返回。set
参数在容器中,则返回key
。正如@IgorTandetnik建议的那样,如果你想添加(例如:一个计数器作为两级value
的信息),代码totalmap [1] [2] ++将起作用。
map
在totalmap[1]
中创建一个新元素(键:1,值:map
,默认构造,为空)并返回。map<int, int>{}
在totalmap[1][2]
(键:2值:0)中创建一个新元素并返回。inner map
增加totalmap[1][2]++