본문 바로가기
알고리즘/정리

[C++] 2차원 벡터 정렬(sort)

by twinkite 2021. 10. 25.
반응형

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