반응형
sort함수는 C++ STL에서 제공하며 <algorithm>헤더를 include해서 사용할 수 있다.
vector<vector<int>> v ={{10,2}, {1,3}, {2,4}, {9,8}, {7,7}, {9,1}};
sort(v.begin(), v.end());
for(auto a : v){
cout<<a[0]<<' '<<a[1]<<'\n';
}
return 0;
/* 출력
1 3
2 4
7 7
9 1
9 8
10 2
*/
2차원 벡터를 정렬해본다. 기본적으로는 사전순으로 정렬이 된다. 하지만 문제를 풀다 보면 사전순이 아닌 사전 역순, 또는 a[1]를 기준으로 정렬해야 할 일들이 생긴다.
bool cmp(vector<int> &v1, vector<int> &v2){
if(v1[1] == v2[1])
return v1[0]<v2[0];
else return v1[1]<v2[1];
}
sort(v.begin(), v.end(), cmp);
/* 결과
vector<vector<int>> v ={{10,2}, {1,3}, {2,4}, {9,8}, {7,7}, {9,1}, {7,1} ,{10,1}};
7 1
9 1
10 1
10 2
1 3
2 4
7 7
9 8
*/
이럴 때 비교 함수를 직접 작성해서 sort의 세번째 매개변수로 넘겨주면 정렬 방식을 마음대로 바꿀 수 있다. 예시의 경우 두번째 인자를 오름차순으로 정렬하고 만약 두번째 인자가 같은 경우 첫번째 인자를 오름차순으로 정렬하도록 했다.
문제 푸는데 갑자기 생각이 안나서 시간을 한참 날리는 바람에 열받아서 정리한 글
반응형
'알고리즘 > 정리' 카테고리의 다른 글
[Javascript]순열과 조합(Permutation & Combination) (0) | 2021.09.17 |
---|