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

3

This is what I am aiming to do...

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

当x是向量var_name的大小,y是pair内部向量的大小时。

上述语句不起作用,因为pair模板只允许常数。我该如何使我的两个向量分别达到x和y的大小?

4个回答

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

不错!make_pair...我怎么没想到呢? - Jimmy Huch

1

你可以使用来自<utility>make_pair构造你想要用来初始化vector的pair。例如:

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))


1

简化为:

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));

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的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接