C++의 map은 자료를 저장할 때 내부에서 자동으로 key값을 기준으로 오름차순으로 정렬한다.
내림차순으로 정렬하고 싶을 때는 아래와 같이 사용한다.
map<int,int,greater>map1
그렇다면, value값을 기준으로 정렬하려면 어떻게 해야할까?
1) map을 vector로 이동한다. (vector 선언)
vector <pair<string, int>> v (map.begin(), map.end());
2) vector를 second 기준으로 정렬한다.
sort(v.begin(), v.end(), comp); // 벡터로 변환하여 정렬하기
<이것이 취업을 위한 코딩 테스트다> 6장 3번째 실전 문제를 풀었다.
내림차순으로 정렬하기 위해 comp 함수를 따로 선언해주었다.
#include<iostream>
#include<map>
using namespace std;
static bool comp(pair<string, int> & a, pair<string,int> & b){
return a.second < b.second;
} // 내림차순 정렬 함수
int main(){
int N;
cin >> N;
map<string, int> student;
string name;
int score;
while (N--){ // map 입력받기
cin >> name >> score;
student.insert(make_pair(name,score));
}
vector < pair<string, int> > v(student.begin(), student.end());
sort(v.begin(), v.end(), comp); // 벡터로 변환하여 정렬하기
for (auto num : v){
cout << num.first << " " << num.second << "\n";
}
return 0;
}
좋은 정보 얻어갑니다, 감사합니다.