如何为没有默认构造函数的对象指示std :: unordered_map的值构造

时间:2019-03-27 15:04:31

标签: c++11 unordered-map

假设我有以下课程:

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 :(得分:0)

如果Foo没有默认构造函数,则无法使用std::unordered_map::operator[]。但是不需要默认构造Foo的所有东西都可以使用,例如初始化:

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

以及新条目的就地构建:

map.emplace(11223344, 100);