插入到一个无序映射的无序映射中

Inserting in to an unordered_map of unordered_map?

本文关键字:无序 映射 一个 插入      更新时间:2023-10-16

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

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

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

做这件事最干净的方法是什么?

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