본 문서는 다음의 내용을 참고하여 실제로 사용될 수 있는 코드만을 정리했다.
일단 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<K, V>::second, 2));
만약 STL만 이용하겠다면 다음과 같이 먼저 템플릿 스트럭쳐를 정의한다.
template<template <typename> class P = std::less >
struct compare_pair_second {
template<class T1, class T2> bool 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>());
댓글