首页 > 解决方案 > 如何为没有默认构造函数的对象指示 std::unordered_map 的值构造

问题描述

假设我有以下课程:

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

    int bar;
}

我如何指示 a在需要时std::unordered_map<int, Foo> map进行构造Foo(100),例如:

为了使以下代码段起作用:

std::unordered_map<int, Foo> map;

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

这甚至可能吗?

标签: c++11unordered-map

解决方案


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

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

以及新入口的就地建设:

map.emplace(11223344, 100);

推荐阅读