[STL] - map

map

map

  • map은 각 노드가 key와 value쌍으로 이루어진 트리이다.
  • 앞부분은 key, 뒷부분은 value라고 칭한다.
    //자료형은 아무거나 가능<key, value>
    map<pair<int, string>> mp;
    
  • 값을 insert하면 key값을 기준으로 오름차순으로 자동정렬된다.
  • 중복을 허용하지 않는다.

map을 value 기준으로 정렬하는 방법

  1. map을 vector로 변환
  2. 비교연산자 사용자 정의
  3. 사용자 정의 compare sort
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

bool comp(pair<int, int> &a, pair<int, int> &b) {
    // 괄호 < : 오름차순기준
    // 괄호 > : 내림차순기준

    //second값 비교시 다르면 second(value)기준 오름차순
    if (a.second != b.second) return a.second < b.second;
    //second값 비교시 같으면 first(key)기준 내림차순
    return a.first > b.first;
}

vector<int> solution(vector<int> numlist, int n) {
    vector<int> answer;
    map<int, int> mp;

    //map값 넣기
    for (auto  num : numlist) {
        mp.insert({num, abs(n - num)});
    }

    vector<pair<int, int>> vec(mp.begin(), mp.end());

    sort(vec.begin(), vec.end(), comp);

    for (auto v : vec) answer.push_back(v.first);

    return answer;
}