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

时间:2011-06-13 18:00:10

标签: c++ vector int std-pair

这就是我的目标...

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

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

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分: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));

答案 2 :(得分: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))

答案 3 :(得分: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),当替换为该行的其余部分时,会给出本杰明林德利的回答。