当我尝试定义这个 vector< pair< int , pair<int, int> > > vp(n)

When i try to define this vector< pair< int , pair<int, int> > > vp(n)

输出中有给我0 0

#include <bits/stdc++.h>
#define fsv(i , n)  for(int i = 0 ; i < n ; ++i)
using namespace std;

int main()
{
 int n ;
 cin >> n ;
 vector< pair< int , pair<int, int> > > vp(n);
 vector <int> v(n) ;

 fsv(i , v.size())cin >> v[i];

  for(int i = 0 ; i < n ; ++i){
     for(int j = i+1 ; j < n-1 ; ++j){
        vp.push_back(make_pair(abs(v[i]-v[j]) , make_pair(i,j)));
     }
  }
 sort(vp.begin() , vp.end());

 cout << vp[0].second.first << " " << vp[0].second.second;

}

此代码与代码强制问题相关,我知道还有其他方法...但我想问的是这是访问此类元素的正确方法吗?! http://codeforces.com/contest/34/problem/A

问题是

vector< pair< int , pair<int, int> > > vp(n);
// ......................................^^^  n initial elements

n 个元素和 push_back()add other n 初始化一个向量元素`.

排序后 vv[0] 元素(我想)是 n.

的首字母之一

您应该创建一个向量

vector< pair< int , pair<int, int> > > vp;
// ....................................^^  no more initial elements; empy!

并且,为了加快速度并避免多余的重定位,保留 n 作为大小(但不是必需的)

vp.reserve(n);

在推回 n 个元素之前。

题外话建议:请避免包含 not-standard header as

#include <bits/stdc++.h>