我有一个集合定义为 -
using Parameters = std::vector<int>;
using Group = std::pair<std::string, Parameters>;
std::vector<Group> inputs;
我的意图是使用像这样的语句
inputs.push_back(group0 /*What goes in here ?*/);
inputs.push_back(group1 /*What goes in here ?*/);
如何使用初始化列表初始化 group0
和 group1
?
像这样的代码似乎不起作用
inputs.push_back(std::make_pair("group0", {1, 2, 3, 4}));
编辑:有关于 vector 对初始化的问题,但我看不到 std::pair
的 second
的任何地方又是一个集合。
最佳答案
当您编写 inputs.push_back(std::make_pair("group0", {1, 2, 3, 4}))
时,您要求 make_pair
推断其两个参数的类型。但是第二个参数,braced-init-list,不是一个表达式,所以它没有类型。因此,模板参数推导失败。
最简单的解决方案是删除对 make_pair
的调用并在所有地方使用 braced-init-lists。
inputs.push_back({"group0", {1, 2, 3, 4}});
现在,列表初始化将enumerate available constructors并使用外部参数对调用 pair
构造函数,并为内部 braced-init-list 调用 vector
构造函数。
关于c++ - vector 对统一初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42711643/