알고리즘과 자료구조/자료구조
vector sort 사용하기
has won
2022. 5. 3. 15:05
반응형
오늘은 자주 사용하는 벡터의 sort에 관해 정리하고자 한다
vector의 선언은 다음과 같이 하면 편리하다.
vector<pair< pair <int, int>, pair<int, int> > > data;
vector의 정렬은 다음과 같이 응용하면 편리하다
// id total sumbit last
bool compare(pair<pair<int,int>,pair<int,int> > a, pair<pair<int,int>,pair<int ,int> > b){
if(a.first.second == b.first.second){
if(a.second.first == b.second.first){
return a.second.second < b.second.second;
}
return a.second.first < b.second.first;
}
return a.first.second > b.first.second;
}
sort 메소드의 사용은 다음과 같이 응용한다.
sort(data.begin(),data.end(),compare);
추가로 vector 삽입은 다음과 같이 응용한다.
// id total submit, last
data.push_back(pair<pair<int,int>,pair<int,int> >(make_pair(i,total[i]),make_pair(submit[i],last[i])));
#include <bits/stdc++.h>
using namespace std;
// id total sumbit last
bool compare(pair<pair<int,int>,pair<int,int> > a, pair<pair<int,int>,pair<int ,int> > b){
if(a.first.second == b.first.second){
if(a.second.first == b.second.first){
return a.second.second < b.second.second;
}
return a.second.first < b.second.first;
}
return a.first.second > b.first.second;
}
int main(){
int T;
scanf("%d",&T);
for(int p=0;p<T;p++){
vector<pair< pair <int, int>, pair<int, int> > > data;
int score[101][101]={0};
int submit[101]={0};
int last[101]={0};
int n,k,t,m;
scanf("%d %d %d %d",&n,&k,&t,&m);
for(int l=0;l<m;l++){
int i,j,s;
scanf("%d %d %d",&i,&j,&s);
score[i][j] = max(score[i][j],s);
submit[i]++;
last[i] = l;
}
int total[101]={0};
for(int i=1; i<=n;i++){
for(int j=1;j<=k;j++){
total[i] += score[i][j];
}
// id total submit, last
data.push_back(pair<pair<int,int>,pair<int,int> >(make_pair(i,total[i]),make_pair(submit[i],last[i])));
}
sort(data.begin(),data.end(),compare);
for(int i=0;i<n;i++){
if(data[i].first.first == t){
//printf("\n이게 정답이다 %d\n", i+1);
printf("%d\n",i+1);
}
}
}
}
반응형