鉴于此类型:
std::map<int, std::vector<T>> map;
如何直接放置元素?
map.emplace(10, /* ? */);
我可以先单独创建向量,然后在调用emplace时使用该标识符,但如果可以直接以某种方式执行它,这是不可取的。
答案 0 :(得分:3)
将piecewise_construct
与std::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。