경험의 기록

벡터를 이용한 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

이와 같이 행의 첫번째 열 기준으로 오름차순 정렬을 하는 것을 알 수 있다.

만약 이것을 두번째 열 기준으로 오름차순 정렬하고 싶다면

 

1
2
3
4
bool SortSecCol(const vector<int>& v1, const vector<int>& v2)
{
    return v1[1< v2[1];
}
cs

함수를 추가해준후 이 함수를 기준으로 사용하면 된다.

 

 

정상적으로 두번째 열 기준으로 오름차순 정렬된것을 확인할 수 있다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading