본문 바로가기
Bioinformatics/Technology

STL map 값으로 정렬(sort by value)

by 임은천 2013. 3. 8.

본 문서는 다음의 내용을 참고하여 실제로 사용될 수 있는 코드만을 정리했다.


http://stackoverflow.com/questions/279854/how-do-i-sort-a-vector-of-pairs-based-on-the-second-element-of-the-pair


일단 map에 있는 값을 vector로 복사한다.


std::vector<std::pair<K,V> > vec(map.begin(), map.end());


다음으로 정렬을 수행한다.

부스트(boost)를 이용할 경우 다음과 같다.


std::sort<vec.begin(), vec.end(), boost::bind(&std::pair<K, V>::second, _1) < boost::bind(&std::pair<KV>::second, 2));


만약 STL만 이용하겠다면 다음과 같이 먼저 템플릿 스트럭쳐를 정의한다.


template<template <typename> class P = std::less >

struct compare_pair_second {

    template<class T1class T2bool operator()(const std::pair<T1,T2>&left, const std::pair<T1,T2>&right) {

        return P<T2>()(left.second, right.second);

    }

};


다음으로 다음과 같이 실제 정렬을 수행한다.


std::sort(v.begin(), v.end(), compare_pair_second<std::less>());


std::sort(v.begin(), v.end(), compare_pair_second<std::greater>());



댓글