如何按值对 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::transform 的关联容器算法,包括 std::map 和 std::unordered_map。
以上是如何按值对 std::map 进行有效排序?的详细内容。更多信息请关注PHP中文网其他相关文章!