c++ - vector 对统一初始化

标签 c++ c++11 stdvector std-pair list-initialization

我有一个集合定义为 -

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 ?*/);

如何使用初始化列表初始化 group0group1? 像这样的代码似乎不起作用

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

编辑:关于 vector 对初始化的问题,但我看不到 std::pairsecond 的任何地方又是一个集合。

最佳答案

当您编写 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/

相关文章:

java - Java中等效的指针数组

c++通过移动指针在数组中导航

c++ - C++ 中的函数名称 : Capitalize or not?

c++ - 如何将一系列数据从 char 数组复制到 vector 中?

c++ - 填充未知大小的 std::vector 的最快方法

C++ 模板和继承,派生类中的函数未被替换

c++ - 为什么 std::swap 不适用于 std::bitset<n> 内容?

c++11 - std::bind 和 boost::bind 技巧

c++ - std::map 和 std::vector 线程安全吗?

c++ - 模板模板参数的通用引用