如何在 c++ 中使用 unordered_maps 的unordered_map?

How to use unordered_map of unordered_maps in c++?

本文关键字:unordered maps map c++      更新时间:2023-10-16

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

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

我需要 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 。/.exe 值:0、0、1518395376 。/.exe 值:0、0、-210403408 。/.exe 值:0、0、-1537331360 。/.exe 值:0、0、-915603664

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

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

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

您可以向结构添加默认构造函数:

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

然后,当您添加新结构时,您可以执行以下操作:

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

你可以像类一样给构造函数,并将其初始化为 0

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