【问题标题】:How to instruct std::unordered_map's value construction for objects that don't have a default constructor如何为没有默认构造函数的对象指示 std::unordered_map 的值构造
【发布时间】:2019-03-27 15:04:31
【问题描述】:

假设我有以下课程:

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

    int bar;
}

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

  • 地图初始化
  • 地图运算符 []

为了使以下 sn-p 工作:

std::unordered_map<int, Foo> map;

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

这可能吗?

【问题讨论】:

  • std::unordered_map&lt;int, Foo&gt; map; 应该可以工作;你有问题吗? operator[] 不行;避免它。
  • 为 Foo 添加默认构造函数

标签: c++11 unordered-map


【解决方案1】:

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

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

以及新入口的就地建设:

map.emplace(11223344, 100);

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2016-07-18
    相关资源
    最近更新 更多