插入到unordered_map的unordered_map中?

3

我有一个数据结构,它是一个无序映射的无序映射:

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

我希望能向map1中插入一个元素,而不需要使用IF语句来检查它是否已经存在。但是我有点困惑,因为除非您已经拥有map1元素,否则map2没有值,但是map1元素来自map2(如果它已经存在于那里)。
最干净的方法是什么?

6
the_map[i][j] = val 不起作用吗? - Ben Voigt
1个回答

6
如果您不使用指针,您可以简单地在两个映射上使用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;
}

嗨,使用你的例子后,我有一个map2*指针,而不是一个map2对象。 - user997112
@user997112,我已经更新了我的答案,如果map2*是唯一的问题,那么你可以尝试使用我的解决方案。但是,如果你有std::unordered_map<std::string, map1*>类型,情况会变得更糟。 - Nikolay K
1
如果您有一个指针,那么您也可以写 (*m1)["a"]["b"] = 1; - Praetorian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接