C++ pair 사용하여 쌍으로 값저장, vector를 사용한 예
Pair<[Type], [Type] > 이란?
- 2개의 각각 지정한 타입의 값을 저장한다.
- 저장한 값은 .first 와 .second로 각각 접근할 수 있다.
- 2개의 연관된 값을 같이 저장할 수 있어서 관리를 용이하게 할 수 있다.
- 특히, 연관된 2개의 값에서 각각의 조건에 따라 정렬한 결과를 얻고자 할 때 사용하면 좋다.
( 즉, 2개의 정렬 조건으로 정렬을 하고 싶을 때)
[ 코 드 ]
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool comp(pair<int, double> a, pair<int, double> b) {
if (a.second == b.second) a.first < b.first;
return a.second > b.second;
}
int main() {
vector<int> v;
int N = 8;
pair< int, int> test = make_pair(1, 2);
vector<pair<int, double>> vv;
v.push_back(1);
v.push_back(3);
v.push_back(2);
v.push_back(1);
v.push_back(0);
for (int i = 0; i < v.size(); i++) {
vv.push_back(make_pair(i + 1, (double)v[i] / N));
N -= v[i];
} // (1, 0.125) (2, 0.4285) (3, 0.5) (4, 0.5) (5, 0) 순으로 데이터가 있다.
sort(vv.begin(), vv.end(), comp); // 2번째 값이 큰 순으로, 1번째 값이 작은 순으로 정렬을 한다.
for (int i = 0; i < vv.size(); i++) {
cout << vv[i].first << " " << vv[i].second << "\n";
}
return 0;
}
- 14라인 : pair변수를 선언하고 값을 할당한다. 값을 줄 때는 make_pair( 값1, 값2)를 사용해준다.
- 15라인 : vector의 pair타입을 사용하여 선언함으로써 pair 변수를 저장할 수 있게 한다.
- 23라인 : pair 타입을 저장하는 vector이므로 make_pair을 사용해 주어서 값을 저장하고 있다.
[ 결 과 ]
- 결과를 보면 2번째 값에 따라서 내림차순 정렬이 되며, 2번째 값이 같을 경우 1번째 값에 따라 오름차순 정렬이 되었다.
'C++ > STL' 카테고리의 다른 글
[STL] C++ priority_queue 우선순위 큐 (0) | 2020.04.07 |
---|---|
[STL] C++ queue 생성 및 삽입, 삭제 (0) | 2020.04.07 |
[STL] C++ stack 생성 및 삽입, 삭제 (0) | 2020.03.31 |
C++ vector 오름차순, 내림차순 정렬 (0) | 2020.03.30 |
C++ vector 생성 및 삽입, 삭제 (0) | 2020.03.28 |