값으로 std::map 정렬
키가 아닌 값으로 std::map을 정렬하는 것은 일반적인 요구 사항입니다. 다양한 프로그래밍 시나리오. 이 기사에서는 사용자 정의 템플릿 함수를 사용하여 맵에서 키와 값 쌍을 뒤집어 이 문제에 대한 우아한 솔루션을 제공합니다.
쌍 및 맵 뒤집기를 위한 사용자 정의 템플릿 함수
제공된 솔루션에는 두 가지 사용자 정의 템플릿 함수인 Flip_pair() 및 Flip_map()이 포함됩니다. Flip_pair() 함수는 한 쌍의 값을 가져와 뒤집어서 교환된 값이 포함된 새 쌍을 만듭니다.
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); }
flip_map() 함수는 Flip_pair() 함수를 활용하여 모든 키를 뒤집습니다. 소스 맵의 값 쌍을 반환하고 뒤집힌 쌍이 있는 새 멀티맵을 반환합니다.
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; }
예 사용법
std::map을 값별로 정렬하려면 Flip_map() 함수를 사용하여 반전된 쌍으로 새 멀티맵을 생성할 수 있습니다. 이 멀티맵은 소스 맵의 이전 값을 기준으로 정렬됩니다.
std::map<int, double> src; ... std::multimap<double, int> dst = flip_map(src); // dst is now sorted by what used to be the value in src!
C 11 이상에 대한 일반 연관 소스
표준에 대한 대체 연관 컨테이너의 경우: :map(예: std::unordered_map), 보다 일반적인 함수를 사용하여 std::map과 std::unordered_map 소스.
// flips an associative container of A,B pairs to B,A pairs 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 등과 같은 필수 템플릿 매개변수를 지원하는 모든 연관 컨테이너와 함께 사용할 수 있습니다.
위 내용은 C에서 `std::map`을 값별로 효율적으로 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!