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

时间:2018-06-01 15:59:48

标签: c++ data-structures unordered-map

我有以下数据结构问题?你能帮帮我吗? 因此,当我将新数据项添加到此映射中时,我的要求是将此数据结构初始化为默认值。

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

对于我要添加的每个条目,我需要将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的默认初始化没有完成?

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

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

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

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

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

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

答案 2 :(得分:2)

您可以像构造类一样为构造函数赋予构造函数,并将其初始化为0

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