2014-09-03 30 views
0

我总是在C++中使用多层次地图,如map<int,map<int,map<int,int>>>,但是我找不到一个更有效的方法来更新它或创建它。假设我想插入一个点(1,2)到被用来计算点的地图,我将做到以下几点:如何在C++中高效创建地图

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

返回值你说的写代码的效率或运行时的效率? – 2014-09-03 02:47:46

+3

'totalmap [1] [2] ++;'相当于你的整个片段。 – 2014-09-03 02:52:50

+0

对于计数点,有没有一个理由不喜欢地图,int>来映射>? – 2014-09-03 02:58:18

回答

1

operator[]std::map(和类似容器,集多重映射等)的工作如下:

  • 如果key参数不是在容器中,构建了value默认添加即keymap(如果是set,则添加密钥)并返回。
  • 如果key参数在容器中,则返回value

由于@IgorTandetnik建议,如果你想补充(例如:一个计数器作为二级map的信息)的代码totalmap [1] [2] ++会工作。

  1. totalmap[1]创建在map一个新元素(标号:1,值:map<int, int>{},默认构造,空)并返回。
  2. totalmap[1][2]inner map(key:2 value:0)中创建一个新元素并返回。
  3. totalmap[1][2]++增量inner map
+0

你说得对,谢谢。 – Constantine 2014-09-03 03:14:11