습관처럼
C++ - Compare(feat: sorting, algorithm) 본문
알고리즘을 풀때 Sorting을 내림차순 또는 오름차순으로 하죠?~^^ 이때 보통 내림차순은 greater<int>()를 사용하여 내림차순 또는 오름차순을 정의했습니다. 하지만 비교대상이 일차원을 넘을경우 어떻게 처리하는지 알아보도록 하겠습니다.
Default 오름차순 Sorting - 오름차순으로 비교할때는 그냥 Sorting을 하면 됩니다~
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main(){
vector<int>a;
a.push_back(1);
a.push_back(31);
a.push_back(14);
a.push_back(12);
a.push_back(11);
a.push_back(15);
a.push_back(2);
sort(a.begin(),a.end());
for(int number:a) cout<<number<<"\n";
return 0;
}
내림차순 Sorting - greater<int>() 원소가 하나일 때~
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main(){
vector<int>a;
a.push_back(1);
a.push_back(31);
a.push_back(14);
a.push_back(12);
a.push_back(11);
a.push_back(15);
a.push_back(2);
sort(a.begin(),a.end(),greater<int>());
for(int number:a) cout<<number<<"\n";
return 0;
}
내림차순 Sorting 비교대상이 하나이상 - vector, pair 이용할 때~
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
bool compare(pair<int,int>a,pair<int,int>b){
if(a.first==b.first)
return a.second>b.second;
else
return a.first>b.first;
}
int main(){
vector<pair<int,int> >a;
a.push_back(make_pair(1,23));
a.push_back(make_pair(3,45));
a.push_back(make_pair(532,34));
a.push_back(make_pair(11,34));
a.push_back(make_pair(11,94));
a.push_back(make_pair(15,917));
a.push_back(make_pair(2,88));
sort(a.begin(),a.end(),compare);
for(int i=0;i<a.size();i++){
cout<<a[i].first<<" "<<a[i].second<<"\n";
}
return 0;
}
내림차순 Sorting 비교대상이 하나이상 - vector, pair 2개 이상~
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
bool compare(pair<int,pair<int,int> >a,pair<int,pair<int,int> >b){
if(a.first == b.first){
if(a.second.first == b.second.first) return a.second.second > b.second.second;
else return a.second.first > b.second.first;
}
else return a.first > b.first;
}
int main(){
vector<pair<int,pair<int,int> > >a;
a.push_back(make_pair(1,make_pair(1,6)));
a.push_back(make_pair(5,make_pair(2,5)));
a.push_back(make_pair(2,make_pair(9,7)));
a.push_back(make_pair(59,make_pair(2,2)));
a.push_back(make_pair(2,make_pair(5,9)));
sort(a.begin(),a.end(),compare);
for(int i=0;i<a.size();i++){
cout<<a[i].first<<"::"<<a[i].second.first<<"::"<<a[i].second.second<<"\n";
}
return 0;
}
이제 직접 크기대소 compare function을 만들어 사용하시면 더욱 효육적을 코딩할 수 있을것입니다~ ^0^
'Language > C++' 카테고리의 다른 글
C++ - 입출력 효율성 증가시키는 방법 (0) | 2020.03.30 |
---|---|
소수 구하기 (에라토스테네스의 체) (0) | 2020.03.19 |
C++ - Array Size (0) | 2020.03.04 |
C++ - 범위 기반 for문 (feat: range based for statement) (0) | 2020.03.04 |
매개변수 - 2차원 배열 (0) | 2020.01.28 |