[C++] map의 value 기준으로 정렬하기

tissue·2023년 8월 4일
0

C++

목록 보기
1/2

map

C++의 map은 자료를 저장할 때 내부에서 자동으로 key값을 기준으로 오름차순으로 정렬한다.
내림차순으로 정렬하고 싶을 때는 아래와 같이 사용한다.

map<int,int,greater>map1

그렇다면, value값을 기준으로 정렬하려면 어떻게 해야할까?

vector

1) map을 vector로 이동한다. (vector 선언)

vector <pair<string, int>> v (map.begin(), map.end());

2) vector를 second 기준으로 정렬한다.

sort(v.begin(), v.end(), comp); // 벡터로 변환하여 정렬하기

Code

<이것이 취업을 위한 코딩 테스트다> 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;
}
profile
Better than Yesterday!

1개의 댓글

comment-user-thumbnail
2023년 8월 4일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기