将矢量放入地图

时间:2015-02-27 17:15:05

标签: c++ dictionary vector

鉴于此类型:

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

如何直接放置元素?

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

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

2 个答案:

答案 0 :(得分:3)

piecewise_constructstd::make_tuple

一起使用
map.emplace(std::piecewise_construct, std::make_tuple(5), std::make_tuple(10, 3));

答案 1 :(得分:1)

两个

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})没有类型这一事实有关,因此无法使用完美转发(这是map.emplace)所必需的。关于这一点,有几个相关的SO帖子,例如this answer