편집 : c ++ 14를 사용하면 이제 유형 매개 변수를 가질 수있는 람다 덕분에 최상의 솔루션을 작성하는 것이 매우 쉽습니다 auto
. 이것은 내가 현재 가장 좋아하는 솔루션입니다
std::sort(v.begin(), v.end(), [](auto &left, auto &right) {
return left.second < right.second;
});
커스텀 비교기를 사용하십시오 (선택적 인 세 번째 인수입니다 std::sort
)
struct sort_pred {
bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
return left.second < right.second;
}
};
std::sort(v.begin(), v.end(), sort_pred());
C ++ 11 컴파일러를 사용하는 경우 람다를 사용하여 동일하게 작성할 수 있습니다.
std::sort(v.begin(), v.end(), [](const std::pair<int,int> &left, const std::pair<int,int> &right) {
return left.second < right.second;
});
편집 : 질문에 대한 편집 내용에 따라 몇 가지 생각이 있습니다 ... 정말 독창적 이고이 개념을 많이 재사용하려면 템플릿을 만드십시오.
template <class T1, class T2, class Pred = std::less<T2> >
struct sort_pair_second {
bool operator()(const std::pair<T1,T2>&left, const std::pair<T1,T2>&right) {
Pred p;
return p(left.second, right.second);
}
};
그럼 당신도 이것을 할 수 있습니다 :
std::sort(v.begin(), v.end(), sort_pair_second<int, int>());
또는
std::sort(v.begin(), v.end(), sort_pair_second<int, int, std::greater<int> >());
솔직히 말하지만, 이것은 모두 약간 과잉입니다 .3 줄 함수를 작성하고 완료하십시오 :-P