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

如何在 C 中按值对 std::map 进行排序?

DDD
DDD原创
2024-11-30 19:01:121008浏览

How Can I Sort an std::map by Value in C  ?

按值对 std::map 进行排序

问题:如何根据 std::map 的值轻松对 std::map 进行排序值?

答案

传统方法(C 11 之前)

在引入 C 11 之前,按值对映射进行排序需要将 std::map 转换为 std::pair 的中间步骤。这涉及使用自定义排序函数并手动指定比较参数。

C 11 方法

随着 C 11 的出现,出现了一种更简洁的解决方案。以下代码片段演示了如何操作:

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

此函数有效地翻转映射中的键值对,允许您迭代排序的值。

通用关联源(C 11 及以上)

为了获得更大的灵活性,可以创建翻转函数的通用版本,允许它可以与任何关联容器一起使用:

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中文网其他相关文章!

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