首页 >后端开发 >C++ >如何按值而不是键对 std::map 进行排序?

如何按值而不是键对 std::map 进行排序?

DDD
DDD原创
2024-12-25 05:22:13341浏览

How Can I Sort an std::map by Value Instead of Key?

按值对 std::map 进行排序

按值而不是键对 std::map 进行排序可能比按排序更复杂钥匙。以下是对该问题的深入分析和解决方案:

解决方案 1:使用 Multimap

要按值对 std::map 进行排序,我们可以创建一个多重映射,其中值作为键,键作为值。这允许我们按值排序,如下例所示:

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;
}

通过迭代原始映射并将翻转的对插入到多重映射中,我们本质上反转了键值关系,然后可以按新键(原始值)排序。

解决方案 2:通用关联源 (C 11必需)

对于替代关联容器(例如 std::unordered_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::map 进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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