벡터를 이용한 2차원 배열 동적할당과 STL 정렬
vector <vector<int>> 이름(n,vector<int>(m,0));
형태로 선언하게 되면 n행 m열을 가지는 int형의 2차원 배열처럼 사용할 수 있다.
C++ 에서는 라이브러리로 정렬을 제공한다.
sort( 배열의 시작, 배열의 끝, 함수)
ex) sort(arr,arr+10)
형태로 쉽게 정렬할 수 있으며, 함수 자리에는 사용자가 직접 정렬 기준을 정해줄 수 있다.
함수 자리에 아무 값을 넣지 않으면 defalut로 오름차순 정렬을 해준다.
greater<자료형>() = 내림차순
less<자료형>() = 오름차순
2차원 벡터를 기준함수 없이 sort함수로 정렬하면
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector <vector<int>> time(n,vector<int>(2,0)); // n행 2열을 가지는 벡터 선언
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2; j++) {
cin >> time[i][j];
}
} // 테스트를 위한 임의의 값 배정
cout << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2; j++) {
cout << time[i][j] << " ";
}
cout << endl;
} // 출력
sort(time.begin(), time.end()); // 기준 함수를 정해주지 않음 (기본값 오름차순)
cout << "정렬 후 값 : " << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2; j++) {
cout << time[i][j] << " ";
}
cout << endl;
} // 정렬 된 후 값 출력
return 0;
}
|
cs |
이와 같이 행의 첫번째 열 기준으로 오름차순 정렬을 하는 것을 알 수 있다.
만약 이것을 두번째 열 기준으로 오름차순 정렬하고 싶다면
|
bool SortSecCol(const vector<int>& v1, const vector<int>& v2)
{
return v1[1] < v2[1];
}
|
cs |
함수를 추가해준후 이 함수를 기준으로 사용하면 된다.
정상적으로 두번째 열 기준으로 오름차순 정렬된것을 확인할 수 있다.