插入到 unordered_map 的 unordered_map 中?

use*_*112 3 c++ unordered-map c++11

我有一个数据结构,它是 unordered_map 的 unordered_map:

typedef std::unordered_map<string, int> map1;
typedef std::unordered_map<string, map1> map2;
Run Code Online (Sandbox Code Playgroud)

我想在map1中插入一个元素,而不需要使用IF语句来检查它是否已经存在。但是,我有点困惑,因为除非您已经拥有 map1 元素,否则 map2 没有值,但 map1 元素来自 map2(如果它已经存在)。

什么是最干净的方法来做到这一点?

Nik*_*yev 5

如果你不使用指针,你可以简单地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;
}
Run Code Online (Sandbox Code Playgroud)

如果只有map2*您可以执行以下操作

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

    std::cout << m2["a"]["b"] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)