C++ map value sort - 맵 값 정렬
Notepad96
·2020. 11. 17. 05:55
1. Map value sort
Map 컨테이너에서 처음 선언하는 방식의 따라 Key 기준으로 오름차순, 내림차순을 지정할 수 있다.
하지만 1. 만약 Key가 아닌 Value를 비교하여 정렬을 하고 싶을 경우
혹은 2. 단순히 오름차순, 내림차순이 아닌 특정 조건에 의하여 정렬을 하고 싶을 경우
Map을 Vector로 변환한다음 Vector에서 정렬을 하던것처럼 해주면 된다.
2. 코 드
환경 : Visual Studio 2019
#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 기준 내림차순으로 정렬 하였다.
3. 참 조
'C++ > STL' 카테고리의 다른 글
C++ 값 회전하기 rotate (0) | 2020.11.18 |
---|---|
C++ 거꾸로 뒤집기 reverse (0) | 2020.11.17 |
C++ 제곱 수, 제곱근 구하기 pow, sqrt, hypot (0) | 2020.11.16 |
C++ 값 변경하기 replace (0) | 2020.11.16 |
C++ 인접하는 중복되는 원소 지우기 unique (0) | 2020.11.15 |