std::map을 값으로 정렬하는 방법
키 대신 값으로 std::map을 정렬하는 것은 어려울 수 있습니다. 일반적인 해결책 중 하나는 키-값 쌍을 뒤집고 대신 정렬하는 임시 멀티맵을 만드는 것입니다. 그러나 더 깔끔하고 다양한 접근 방식을 제공할 수 있는 대체 기술이 있습니다.
쌍 뒤집기
다음 코드 조각은 키-값 쌍을 뒤집는 방법을 보여줍니다. std::map에서 값으로 정렬된 새 멀티맵을 생성합니다.
template<typename A, typename B> std::pair<B,A> flip_pair(const std::pair<A,B> &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> &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...> &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 중국어 웹사이트의 기타 관련 기사를 참조하세요!