问题:如何根据 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中文网其他相关文章!