Map 컨테이너에서 처음 선언하는 방식의 따라 Key 기준으로 오름차순, 내림차순을 지정할 수 있지만
만약 Key가 아닌 Value를 비교하여 정렬을 하고 싶을 경우라던지 단순히 오름차순, 내림차순이 아닌 특정 조건에 의하여 정렬을 하고 싶을 경우 Map을 Vector로 변환한다음 Vector에서 정렬을 하던것처럼 해주면 된다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
typedef pair<int, int> ii;
int main() {
map<int, int> map;
map[5] = 20;
map[2] = 50;
map[3] = 10;
map[4] = 40;
map[1] = 30;
map[6] = 60;
for (auto it : map) {
cout << it.first << ":" << it.second << " ";
}
cout << "\n==============================\n";
vector<ii> v(map.begin(), map.end());
for (ii it : v) cout << it.first << ":" << it.second << " ";
cout << "\n==============================\n";
sort(v.begin(), v.end(), [](ii a, ii b) {
return a.second > b.second;
});
for (ii it : v) cout << it.first << ":" << it.second << " ";
cout << "\n==============================\n";
return 0;
}
- map은 pair<T, T> 타입으로 Key, Value를 저장하고 있으므로 이를 옮길 vector 또한 타입을 일치시켜 준다.
※ typedef pair<int, int> ii; 처럼 재정의 해줌으로써 코드를 더욱 간결하게 만들 수 있다.
- vector에서는 반복자를 인자로 갖는 생성자가 존재하므로 vector<ii> v(map.begin(), map.end()) 처럼 간단하게 map -> vector로 옮길 수 있다.
- 각 원소의 first에는 Key값이, second에는 Value 값이 들어가게 되며 람다 함수를 사용하여서 vector를 Value 기준 내림차순으로 정렬 하였다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] Iterator (반복자) (0) | 2023.12.19 |
---|---|
[C++] iterator (반복자) vector와 list의 비교 (0) | 2023.12.19 |
[C++] string > int 변환 (개인 작성) (0) | 2023.12.13 |
[C] 문자열에서 특정 문자 변경, 제거 그리고 중복 제거 (0) | 2023.12.13 |
[C] 함수의 포인터 / 배열 매개변수 (0) | 2023.12.11 |