Как использовать unordered_map unordered_maps в c ++? - PullRequest
0 голосов
/ 01 июня 2018

У меня ниже проблема структур данных?Не могли бы вы помочь мне.Поэтому я должен инициализировать эти структуры данных значениями по умолчанию при добавлении новых элементов данных в эту карту.

Как я могу сделать это эффективно?

Мне нужно, чтобы 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

Таким образом, инициализация по умолчанию не выполняетсясделано для а3?

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Вы можете задать конструктор для структуры, как класс, и установить его в 0

struct a
{
   int a1;
   int a2;
   int a3;
   a() : a1(0), a2(0), a3(0)
   {
   }
}
0 голосов
/ 01 июня 2018

Начиная с C ++ 11 вы можете сделать это:

struct a {
 int a1 = 0;
 int a2 = 0;
 int a3 = 0;
};
0 голосов
/ 01 июня 2018

Вы можете добавить конструктор по умолчанию к своим структурам:

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

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

А затем, когда вы добавите новую структуру, вы можете сделать:

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