![](/img/trans.png)
[英]map<string, vector <pair<int, int> > > pushing back into pair?
[英]Why I can't insert the pair value like this? v.push_back(vector<pair<int,string> >({1,"A"}));?
我已经写了这段代码,想像这样在 vector of vector 中插入值: v.push_back(vector<pair<int,string> >({1,"A"})); ??
但是它显示错误......
在此代码中插入空值有效。 但我想知道为什么这不可能??
#include<bits/stdc++.h>
using namespace std;
void printVec(vector<pair<int,string> > &v){
cout << "Size: " << v.size() << endl;
for(int i=0; i<v.size(); i++)
{
cout << v[i].first << " " << v[i].second << endl;
}
}
int main()
{
vector<vector<pair<int,string> > > v;
int N;
cin >> N;
for(int i=0; i<N; i++)
{
int n;
cin >> n;
v.push_back(vector<pair<int,string> >({}));
for(int j=0; j<n; j++)
{
int x;
string s;
cin >> x >>s;
v[i].push_back({x,s});
}
}
v.push_back(vector<pair<int,string> >({})); // UNABLE TO STORE A PAIR AT THE END. ONLY CAN ADD EMPTY PAIR. DON'T KNOW WHY??
// v.push_back({}); // USING ANY OF THEM
for(int i=0; i<v.size(); i++)
{
printVec(v[i]);
}
}
我想在 pair<int, string> 类型的向量的向量末尾插入一个值。 使用这个:- v.push_back(vector<pair<int,string> >({1,"A"}));
但它显示错误。
使用时:-
v.push_back(vector<pair<int,string> >({}));
它工作正常。 请解释为什么??
在这里,您推的是一对而不是一对向量。
v.push_back(vector<pair<int,string> >({1,"A"}));
这是可行的,因为它将 ({}) 视为成对的空向量。 `
v.push_back(vector<pair<int,string> >({}));`
尽管以下将起作用:
vector<pair<int,string> > temp;
temp.push_back({1, "Hi"});
v.push_back(vector<pair<int,string> >({temp}));
如果你想用{1,"A"}
作为std::initializer_list
构造函数的一个元素的初始化器来列表初始化你的向量,你需要使用大括号,而不是圆括号:
vector<pair<int,string>>{{1,"A"}}
或者,如果您不确定如何直接使用向量中的元素进行初始化,或者您还没有学到上述内容,只需定义一个变量来临时保存您想要推入v
的内部向量,推入对元素放入其中,然后使用该变量。 那么你不必猜测任何东西:
vector<pair<int,string>> inner;
inner.push_back({1,"A"});
v.push_back(inner); // alternatively `std::move(inner)` if `inner` is not used later
vector<pair<int,string> >({})
起作用是因为{}
参数可以将std::initializer_list
的std::initializer_list
为std::vector
的构造函数直接为空。 在您最初的尝试中,一组额外的大括号也会以同样的方式工作,尽管那样括号会是多余的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.