>백엔드 개발 >C++ >두 번째 요소를 기준으로 쌍 벡터를 효율적으로 정렬하는 방법은 무엇입니까?

두 번째 요소를 기준으로 쌍 벡터를 효율적으로 정렬하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-09 13:47:24928검색

How to Efficiently Sort a Vector of Pairs by the Second Element?

쌍의 두 번째 요소를 기준으로 쌍의 벡터를 효율적으로 정렬하는 방법

이 문서에서는 다음을 기반으로 쌍의 벡터를 정렬하는 문제를 다룹니다. 각 쌍의 두 번째 요소를 오름차순으로 표시합니다. 이 작업을 위해 사용자 정의 함수 객체를 생성하는 것이 실행 가능한 솔루션이지만 기존 STL 구성 요소와 std::less를 활용하는 대체 방법이 있습니다.

사용자 정의 비교기와 함께 std::sort 사용

한 가지 접근 방식은 사용자 지정 비교기를 std::sort에 대한 선택적 세 번째 인수로 사용하는 것입니다. sort_pred라고 하는 이 사용자 정의 비교기는 다음과 같이 정의됩니다.

struct sort_pred {
    bool operator()(const std::pair<int,int> &amp;left, const std::pair<int,int> &amp;right) {
        return left.second < right.second;
    }
};

이 비교기를 활용하려면 간단히 std::sort:

std::sort(v.begin(), v.end(), sort_pred());

C 11을 사용하여 전달하면 됩니다. 람다

C 11 컴파일러를 사용하는 경우 다음을 활용할 수 있습니다. 사용자 정의 비교기 대신 람다:

std::sort(v.begin(), v.end(), [](const std::pair<int,int> &amp;left, const std::pair<int,int> &amp;right) {
    return left.second < right.second;
});

쌍 정렬을 위한 일반 템플릿 사용

유연성과 재사용성을 높이기 위해 sort_pair_second라는 일반 템플릿을 만들 수 있습니다. :

template <class T1, class T2, class Pred = std::less<T2> >
struct sort_pair_second {
    bool operator()(const std::pair<T1,T2>&amp;left, const std::pair<T1,T2>&amp;right) {
        Pred p;
        return p(left.second, right.second);
    }
};

이 템플릿을 사용하면 다음과 같이 원하는 정렬을 얻을 수 있습니다. 다음:

std::sort(v.begin(), v.end(), sort_pair_second<int, int>());

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

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