>백엔드 개발 >C++ >C의 두 번째 요소를 기반으로 쌍 벡터를 사용자 정의 정렬하는 방법은 무엇입니까?

C의 두 번째 요소를 기반으로 쌍 벡터를 사용자 정의 정렬하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-13 12:12:10502검색

How to Custom Sort a Vector of Pairs Based on the Second Element in C  ?

쌍 벡터의 사용자 정의 정렬

쌍 벡터를 정렬하려는 시나리오를 고려하십시오(

std:: 벡터<std::pair<int, int>
)

별도의 함수 객체를 구현하지 않고 이를 달성하려면 사용자 정의 비교기를 허용하는

std::sort
의 세 번째 매개변수를 활용할 수 있습니다. 이 비교기는 제공된 비교기를 사용하여 두 번째 요소를 기반으로 두 쌍을 비교합니다.

예를 들어 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;
});

또는 ,

operator()
비교를 수행하는 함수:

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());

다양한 유형 및 비교기와 함께 재사용할 수 있는 일반 솔루션을 원하는 경우 다음과 같은 템플릿을 만듭니다.

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>());

위 내용은 C의 두 번째 요소를 기반으로 쌍 벡터를 사용자 정의 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.