>백엔드 개발 >C++ >값을 기준으로 std::map을 효율적으로 정렬하는 방법은 무엇입니까?

값을 기준으로 std::map을 효율적으로 정렬하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-26 10:33:14292검색

How to Efficiently Sort a std::map by Value?

std::map을 값으로 정렬하는 방법

키 대신 값으로 std::map을 정렬하는 것은 어려울 수 있습니다. 일반적인 해결책 중 하나는 키-값 쌍을 뒤집고 대신 정렬하는 임시 멀티맵을 만드는 것입니다. 그러나 더 깔끔하고 다양한 접근 방식을 제공할 수 있는 대체 기술이 있습니다.

쌍 뒤집기

다음 코드 조각은 키-값 쌍을 뒤집는 방법을 보여줍니다. std::map에서 값으로 정렬된 새 멀티맵을 생성합니다.

template<typename A, typename B>
std::pair<B,A> flip_pair(const std::pair<A,B> &amp;p)
{
    return std::pair<B,A>(p.second, p.first);
}

template<typename A, typename B>
std::multimap<B,A> flip_map(const std::map<A,B> &amp;src)
{
    std::multimap<B,A> dst;
    std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), 
                   flip_pair<A,B>);
    return dst;
}

flip_map을 호출하여 원본 std::map에서 값별로 정렬된 멀티맵을 얻을 수 있습니다.

일반 연관 소스

이 접근 방식은 모든 유형의 연관 컨테이너를 뒤집도록 일반화될 수 있습니다. 가변 템플릿 사용:

template<typename A, typename B, template<class,class,class...> class M, class... Args>
std::multimap<B,A> flip_map(const M<A,B,Args...> &amp;src)
{
    std::multimap<B,A> dst;
    std::transform(src.begin(), src.end(),
                   std::inserter(dst, dst.begin()),
                   flip_pair<A,B>);
    return dst;
}

이 일반 오버로드는 다음을 지원하는 모든 연관 컨테이너에서 작동합니다. std::map 및 std::unordered_map을 포함한 std::transform 알고리즘.

위 내용은 값을 기준으로 std::map을 효율적으로 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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