如何在 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);