将矢量放置到地图中
Emplacing vector into map
鉴于此类型:
std::map<int, std::vector<T>> map;
如何直接放置元素?
map.emplace(10, /* ? */);
我可以通过先单独创建向量,然后在调用 emplace 时使用该标识符来实现,但如果可以以某种方式直接实现,这是不可取的。
将 piecewise_construct
与 std::make_tuple
一起使用:
map.emplace(std::piecewise_construct, std::make_tuple(5), std::make_tuple(10, 3));
两者都
map.emplace(typename decltype(map)::value_type(10, {1, 2, 3}));
和
map.emplace(10, std::initializer_list<int>{1, 2, 3});
应该可以正常工作。
我确定 gcc 拒绝我的第一次尝试是有原因的:
map.emplace(10, {1, 2, 3});
但不知道是正当理由还是缺陷
编辑: 这似乎与花括号初始化器列表 ({1, 2, 3}
) 没有类型的事实有关,因此无法使用 with完美转发(这是 map.emplace
所必需的)。关于这一点有几个相关的 SO 帖子,例如 。
鉴于此类型:
std::map<int, std::vector<T>> map;
如何直接放置元素?
map.emplace(10, /* ? */);
我可以通过先单独创建向量,然后在调用 emplace 时使用该标识符来实现,但如果可以以某种方式直接实现,这是不可取的。
将 piecewise_construct
与 std::make_tuple
一起使用:
map.emplace(std::piecewise_construct, std::make_tuple(5), std::make_tuple(10, 3));
两者都
map.emplace(typename decltype(map)::value_type(10, {1, 2, 3}));
和
map.emplace(10, std::initializer_list<int>{1, 2, 3});
应该可以正常工作。
我确定 gcc 拒绝我的第一次尝试是有原因的:
map.emplace(10, {1, 2, 3});
但不知道是正当理由还是缺陷
编辑: 这似乎与花括号初始化器列表 ({1, 2, 3}
) 没有类型的事实有关,因此无法使用 with完美转发(这是 map.emplace
所必需的)。关于这一点有几个相关的 SO 帖子,例如