三数组排序(二维vector)

时间:2021-09-17 01:14:06

Description

MSTC里有好多有特长的人, 有些是力量型人才,有些是智力型人才,有些是敏捷型的。现在告诉你 N 个人, 每个人的力量,智力,敏捷的值, 和每个人的编号。题目要求你将 N 个部员 按照力量 从大到小 排序, 如果两个部员的力量相同, 则按照 智力 值从大到小排序, 如果两个部员力量, 智力 都一样,则按照 敏捷从 小 到 大排序。 测试数据保证没有两个部员的 力量, 智力, 敏捷 全部相同。


Input

第一行 N :表示有 N 个同学。 (  1 <= N <= 500 )

接下来 N 行, 第 i 行有 3 个值, ai, bi, ci   a 代表 力量, b 代表智力, c 代表敏捷。 编号为 i ( i 是部员的编号, 1 <= i <= N )


Output

输出 N 行:


将排序后的部员编号输出。

每行一个编号

Sample Input

4

2 2 3

2 3 4

4 8 9

2 2 2

Sample Output

3

2

4

1


/** 
 *@author   houyong
 *
 */     
#include<algorithm>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<vector>

//#define LOCAL

using namespace std;

bool cmp(vector<int> a,vector<int> b)
{
   if(a[0]!=b[0])
       return a[0]>b[0];
   else if(a[0]==b[0] && a[1]!=b[1])
       return a[1]>b[1];
   else
       return a[2]<b[2];
}

int main()
{
  #ifdef    LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
  #endif // LOCAL
  int T,j,i,k,k1;
  scanf("%d", &T); //T个人数据

  vector<vector<int> > vec; //vec里存放T个人的测试数据
               //直接push_back,不用初始化大小


  for(j=0;j<T;j++)
  {
      vector<int> v0(3,0);//下面要用下标访问,则要初始化大小
     for(i=0;i<3;i++)
     {
         scanf("%d", &v0[i]);
     }
     vec.push_back(v0);

  }
  vector<vector<int> > vec0 =vec;
  sort(vec.begin(),vec.end(),cmp);
  for(k=0;k<T;k++)
  {
      for(k1=0;k1<T;k1++)
      {
          if(vec[k] == vec0[k1])
              cout<<k1+1<<endl;
      }
  }
  return 0;
}