Как проинструктировать конструкцию значения std :: unordered_map для объектов, которые не имеют конструктора по умолчанию - PullRequest
0 голосов
/ 27 марта 2019

Предположим, у меня есть следующий класс:

struct Foo
{
    Foo(int bar) : bar(bar) {}

    int bar;
}

Как я могу инструктировать std::unordered_map<int, Foo> map для построения Foo(100) всякий раз, когда они необходимы, например:

  • инициализация карты
  • оператор карты []

Для того, чтобы работал следующий фрагмент:

std::unordered_map<int, Foo> map;

assertTrue(map[11223344].bar == 100);

Возможно ли это вообще?

1 Ответ

0 голосов
/ 27 марта 2019

Когда Foo не имеет конструктора по умолчанию, использование std::unordered_map::operator[] не может работать. Но все, что не требует построения Foo по умолчанию, будет работать, например, инициализации:

std::unordered_map<int, Foo> map {
   {10, Foo{42}},
   {20, Foo{43}}
};

, а также на месте строительство новой записи:

map.emplace(11223344, 100);
...