给定这种类型:
std::map<int, std::vector<T>> map;
如何直接放置元素?
map.emplace(10, /* ? */);
我可以先单独创建 vector ,然后在调用 emplace 时使用该标识符,但如果可以以某种方式直接执行此操作,这是不可取的。
最佳答案
两者
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 .
关于c++ - 将 vector 放置到 map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770648/