如何在 C++ 中使用 unordered_map of unordered_maps?

How to use unordered_map of unordered_maps in c++?

我有以下数据结构问题?你能帮帮我吗? 所以我的要求是在我将新数据项添加到此地图时将此数据结构初始化为默认值。

我怎样才能有效地做到这一点?

我需要将要添加的每个条目的 a1、a2、a3 设置为零。

struct a {
 int a1;
 int a2;
 int a3;
};

struct A {
 struct a A1;
 struct a A2;
};

unordered_map<int, unordered_map<int, struct A>> big_map;

已尝试 运行 下面的代码。

    unordered_map<int, struct A> inner_map;
    big_map[0] = inner_map;
    struct A m;
    big_map[0][0] = m;
    cout << "Values: " << big_map[0][0].A1.a1 << ", " << big_map[0][0].A1.a2 << ", " << big_map[0][0].A1.a3 << endl;

输出:

g++ -std=c++11 -o exe b.cc 。/可执行程序 值:0、0、1518395376 。/可执行程序 值:0、0、-210403408 。/可执行程序 值:0、0、-1537331360 。/可执行程序 值:0、0、-915603664

所以 a3 没有进行默认初始化?

您可以将默认构造函数添加到您的结构中:

struct a {
    a() : a1(0), a2(0), a3(0) { }
    ...
};

struct A {
    A() : A1(), A2() { }
    ...
};

然后当你添加一个新的结构时,你可以这样做:

big_map[5][7] = A();

你可以像class一样把构造函数赋给struct,然后把它初始化为0

struct a
{
   int a1;
   int a2;
   int a3;
   a() : a1(0), a2(0), a3(0)
   {
   }
}

从 C++11 开始,您可以这样做:

struct a {
 int a1 = 0;
 int a2 = 0;
 int a3 = 0;
};