C++ 向量对一致初始化

C++ 向量对一致初始化,c++,c++11,stdvector,std-pair,list-initialization,C++,C++11,Stdvector,Std Pair,List Initialization,我的收藏定义为: using Parameters = std::vector<int>; using Group = std::pair<std::string, Parameters>; std::vector<Group> inputs; 如何使用初始值设定项列表初始化group0和group1? 这样的代码似乎不起作用 inputs.push_back(std::make_pair("group0", {1, 2, 3, 4})); 编辑:关于向

我的收藏定义为:

using Parameters = std::vector<int>;
using Group = std::pair<std::string, Parameters>;
std::vector<Group> inputs;
如何使用初始值设定项列表初始化
group0
group1
? 这样的代码似乎不起作用

inputs.push_back(std::make_pair("group0", {1, 2, 3, 4}));


编辑:关于向量对初始化已经存在一些问题,但我看不到
std::pair
second
再次是一个集合。

。但是第二个参数,一个大括号的init list,不是一个表达式,所以它没有类型。因此,模板参数推断失败

最简单的解决方案是删除对
make_pair
的调用,并在任何地方使用带括号的init列表

inputs.push_back({"group0", {1, 2, 3, 4}});
现在,列表初始化将使用外部参数对调用
构造函数,并为内部带括号的init列表调用
向量
构造函数。

inputs.push_back({"group0", {1, 2, 3, 4}});
适用于您打算做的事情,我认为使用以下内容更具表现力:

inputs.push_back(std::make_pair("group0", Parameters{1, 2, 3, 4}));
看一看。它进行就地构造,即您可以直接传递参数,
Group
的实例在“最终”存储位置构造。
inputs.push_back(std::make_pair("group0", Parameters{1, 2, 3, 4}));