如何在 C++ 中使用向量配对?
How can I make pair using vector in c++?
我很难将两个整数作为一对放入向量中。我想知道哪里出了问题。谢谢!
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector <pair<int,int>> vec;
int s,n; cin>>s>>n;
for(int i=0;i<n;i++){
int in1,in2; cin>>in1>>in2;
vec[i].push_back(make_pair(in1,in2));
}
sort(vec.begin(),vec.end());
int checker=1;
for(int i=0;i<n;i++){
if(s<=vec[i].first){
checker=0;
break;
}
else{
s+=vec[i].second;
}
}
if(checker>0)cout<<"YES"<<endl;
else if(checker==0)cout<<"NO"<<endl;
return 0;
}
将值压入向量的正确语法是:vectorname.push_back(value)
.
所以,
你需要写 vec.push_back(make_pair(in1,in2));
而不是
vec[i].push_back(make_pair(in1,in2))
.
如果您需要在特定索引插入对,那么您将不得不使用insert
函数而不是push_back
因为 push_back
在向量的末尾插入元素。
要 在第 i 个索引处插入 请使用:
vec.insert(vec.begin() + i, make_pair(int1, int2))
.
变化:
vec[i].push_back(make_pair(in1, in2));
到
vec.push_back(make_pair(in1, in2));
另外,如果你改变这两行的顺序:
vector <pair<int,int>> vec;
int s,n; cin>>s>>n;
并保留vector的size
,就不用每次push_back
都重新分配内存了。这将使您的程序更有效率:
int s,n; cin>>s>>n;
//preallocate for 'n' elements
vector <pair<int,int>> vec;
vec.reserve(n);
为了避免对 std::pair
进行不必要的复制,您可能需要使用 std::vector::emplace_back
:
就地构建 std::pair
vec.emplace_back(in1, in2);
我很难将两个整数作为一对放入向量中。我想知道哪里出了问题。谢谢!
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector <pair<int,int>> vec;
int s,n; cin>>s>>n;
for(int i=0;i<n;i++){
int in1,in2; cin>>in1>>in2;
vec[i].push_back(make_pair(in1,in2));
}
sort(vec.begin(),vec.end());
int checker=1;
for(int i=0;i<n;i++){
if(s<=vec[i].first){
checker=0;
break;
}
else{
s+=vec[i].second;
}
}
if(checker>0)cout<<"YES"<<endl;
else if(checker==0)cout<<"NO"<<endl;
return 0;
}
将值压入向量的正确语法是:vectorname.push_back(value)
.
所以,
你需要写 vec.push_back(make_pair(in1,in2));
而不是
vec[i].push_back(make_pair(in1,in2))
.
如果您需要在特定索引插入对,那么您将不得不使用insert
函数而不是push_back
因为 push_back
在向量的末尾插入元素。
要 在第 i 个索引处插入 请使用:
vec.insert(vec.begin() + i, make_pair(int1, int2))
.
变化:
vec[i].push_back(make_pair(in1, in2));
到
vec.push_back(make_pair(in1, in2));
另外,如果你改变这两行的顺序:
vector <pair<int,int>> vec;
int s,n; cin>>s>>n;
并保留vector的size
,就不用每次push_back
都重新分配内存了。这将使您的程序更有效率:
int s,n; cin>>s>>n;
//preallocate for 'n' elements
vector <pair<int,int>> vec;
vec.reserve(n);
为了避免对 std::pair
进行不必要的复制,您可能需要使用 std::vector::emplace_back
:
std::pair
vec.emplace_back(in1, in2);