C++:矢量<对<矢量<int>,int> >

C++: vector <pair<vector<int>,int> >

本文关键字:gt lt int 矢量 C++      更新时间:2023-10-16

这就是我的目标…

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

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

上面的语句不起作用,因为对模板只允许常量。如何将两个向量的大小分别设置为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>(...)的内容。...是构造函数的参数(将(y)放在尖括号内的任何位置都是不合逻辑的)。在我们的例子中,我们希望第一个值是长度为y的向量,第二个值是…0,我假设。

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

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