2016-06-22 65 views
0
#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <tuple> 
using namespace std; 
typedef long long ll; 
vector < tuple <ll,ll,ll> > a; 
int main() 
{ 
    ll t; 
    cin>>t; 
    ll id,z,p,l,c,s,newz; 
    while(t--) 
    { 
     cin>>id>>z>>p>>l>>c>>s; 
     newz=p*50+l*5+c*10+s*20; 
     a.push_back(make_tuple(z-newz,id,newz)); 
    } 
    sort(a.begin(),a.end()); 
    for(int i=0;i<5;i++) 
    { 
     tie(ignore,id,z)=a[i]; 
     cout<<id<<" "<<z<<endl; 
    } 
    return 0; 
} 
  • 我想在矢量排序元组的第一个元素的基础上发生,但只有当有是一条平行线,那么必须选择元组的第二个元素中最小的元素来排序具有相同第一个值的元素。
  • 还指定应该做什么,如果在一个领带的时候,秩序应该基于元组的第二个元素(而不是第一个元素)的更大元素来维护。

回答

0

自定义函数作为第三个参数完全排序出去。

bool cmp(tuple <ll,ll,ll> const &s, tuple <ll,ll,ll> const &r) 
{ 
    if(get<0>(s)==get<0>(r)) 
    { 
     return (get<1>(s))>(get<1>(r)); 
    } 
    else 
    return (get<0>(s))<(get<0>(r)); 
} 
sort(a.begin(),a.end(),cmp);// Call to sort will change like this. 
相关问题