将矢量放置到地图中

Emplacing vector into map

鉴于此类型:

std::map<int, std::vector<T>> map;

如何直接放置元素?

map.emplace(10, /* ? */);

我可以通过先单独创建向量,然后在调用 emplace 时使用该标识符来实现,但如果可以以某种方式直接实现,这是不可取的。

piecewise_constructstd::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 帖子,例如