2014-09-03 214 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