2015-12-22 50 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