将矢量放入地图

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 的调用中使用该标识符来做到这一点,但这是不可取的,以防可以以某种方式直接进行。

ric*_*ici 8

两个都

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 帖子,例如这个答案


0x4*_*2D2 4

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)

  • 并且永远不要说 C++ 不直观或者它使您的计算机程序难以阅读。_:滑稽:_ (6认同)