首页 >后端开发 >C++ >如何按值对 std::map 进行有效排序?

如何按值对 std::map 进行有效排序?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-26 10:33:14293浏览

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::transform 的关联容器算法,包括 std::map 和 std::unordered_map。

以上是如何按值对 std::map 进行有效排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn