2015-12-22 49 views
1

我有一個數據結構,它是unordered_map的unordered_map:插入unordered_map的unordered_map?

typedef std::unordered_map<string, int> map1; 
typedef std::unordered_map<string, map1> map2; 

,我想中MAP1插入元素,而無需使用IF語句來檢查它是否已經存在。然而,我有點困惑,因爲除非已經有map1元素,否則map2沒有值,但map1元素來自map2(如果它已經存在)。

乾淨的方法是什麼?

+5

是否'the_map的情況下[i] [j] = val'不行? –

回答

2

如果你不使用指針,你可以簡單地在兩個地圖上使用operator[]

#include <iostream> 
#include <unordered_map> 
#include <string> 

typedef std::unordered_map<std::string, int> map1; 
typedef std::unordered_map<std::string, map1> map2; 

int main() 
{ 
    map2 m2; 
    m2["a"]["b"] = 1; 

    std::cout << m2["a"]["b"] << std::endl; 
} 

如果只有map2*你可以做如下

int main() 
{ 
    map2* m1 = new map2(); 
    map2& m2 = *m1; 
    m2["a"]["b"] = 1; 

    std::cout << m2["a"]["b"] << std::endl; 
} 
+0

嗨,使用你的例子,我有一個map2 *指針,而不是map2對象 – user997112

+0

@ user997112我已經更新了我的答案,如果'map2 *'是唯一的問題,那麼你可以嘗試使用我的解決方案。然而,如果你有'std :: unordered_map '類型,它會變得更糟。 – NikolayKondratyev

+1

@ user997112如果你有一個指針,那麼你也可以寫'(* m1)[「a」] [「b」] = 1;' – Praetorian