繁体   English   中英

C++:矢量<pair<vector<int> ,int&gt;&gt; </pair<vector<int>

[英]C++: vector <pair<vector<int>,int> >

这就是我的目标...

vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>);

其中 x 是向量 var_name 的大小,y 是对内向量的大小。

上面的语句不起作用,因为 pair 模板只允许常量。 我怎样才能让我的向量分别设置为 x 和 y?

vector<pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 0));

将其简化为:

pair<vector<int>,int> value(vector<int>(y), 0);
vector<pair<vector<int>,int> > var_name(x, value);

如果您喜欢自己的语法,那么您应该这样做:

vector<pair<vector<int>,int> > var_name(x, std::make_pair(vector<int>(y), 0));

您可以使用<utility>中的make_pair来构造您希望用来初始化vector的对。 例如:

vector< pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 42))

或直接调用pair<vector<int>,int>构造函数(看起来你正在尝试):

vector< pair<vector<int>,int> > var_name(x, pair<vector<int>,int>(vector<int>(y), 0))

pair<vector<int>,int>是类型的名称。 对于初始化,您需要一个值。

您可以通过调用该类型的构造函数来获得一个值(与在语句的顶层您为var_name所做的方式相同)。 由于这是在表达式中内联创建值,而不是初始化变量,因此没有变量名称,我们只需编写类似pair<vector<int>,int>(...)的内容。 ...是构造函数的 arguments(将(y)放在尖括号内的任何位置都是不合逻辑的)。 在我们的例子中,我们希望第一个值是长度为 y 的向量,而第二个值是...... 0,我假设。

所以我们得到pair<vector<int>,int>(vector<int>(y), 0) 这相当笨拙,这就是标准库提供模板 function std::make_pair的原因。 通过使用免费的 function(可以使用模板参数进行推断)来调用构造函数,它绕过了模板 arguments 无法为构造函数推断的事实。

因此,上面的内容缩短为make_pair(vector<int>(y), 0) ,当代入该行的 rest 时,给出了 Benjamin Lindley 的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM