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

问题描述 投票:0回答:1

假设我有以下课程:

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);

这甚至可能吗?

c++11 unordered-map
1个回答
0
投票

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

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

以及新条目的就地建设:

map.emplace(11223344, 100);
© www.soinside.com 2019 - 2024. All rights reserved.