Ano*_*ity 7 c++ dictionary vector
鉴于这种类型:
std::map<int, std::vector<T>> map;
Run Code Online (Sandbox Code Playgroud)
如何直接放置元素?
map.emplace(10, /* ? */);
Run Code Online (Sandbox Code Playgroud)
我可以通过首先单独创建向量,然后在对 emplace 的调用中使用该标识符来做到这一点,但这是不可取的,以防可以以某种方式直接进行。
两个都
map.emplace(typename decltype(map)::value_type(10, {1, 2, 3}));
Run Code Online (Sandbox Code Playgroud)
和
map.emplace(10, std::initializer_list<int>{1, 2, 3});
Run Code Online (Sandbox Code Playgroud)
应该可以正常工作。
我确信 gcc 拒绝我的第一次尝试是有原因的:
map.emplace(10, {1, 2, 3});
Run Code Online (Sandbox Code Playgroud)
但我不知道这是一个好的理由还是一个缺陷。
编辑:这似乎与花括号初始值设定项列表 ( ) 没有类型这一事实有关{1, 2, 3}
,因此无法与完美转发一起使用(这是 必需的map.emplace
)。关于这一点有几个相关的 SO 帖子,例如这个答案。
piecewise_construct
与以下一起使用std::make_tuple
:
map.emplace(std::piecewise_construct, std::make_tuple(5), std::make_tuple(10, 3));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2667 次 |
最近记录: |