2011-06-13 109 views
3

这就是我的目标是什么?C++:矢量<对<vector<int>,INT>>

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

其中x是矢量VAR_NAME和y的大小是里面的向量的大小对。

上述语句不起作用,因为对模板只允许常量。我怎么能让我的矢量分别大小为x和y?

回答

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

不错! make_pair ...为什么我没有想到这一点? – 2011-06-13 18:06:27

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

真棒!有效。 – 2011-06-13 18:04:52

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),当它被替换成其余的行,给本杰明林德利的答案。

1

您可以使用make_pair来自<utility>来构建想要初始化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))

相关问题