C++中map按value排序需借助其他容器或算法。1. 将map转为vector后用sort配合自定义比较函数排序;2. 利用multimap将原value作key插入,利用其自动排序特性;3. value相同时可添加二级排序条件;4. 可封装模板函数提高复用性。常用方法为vector+sort(灵活)或multimap(简洁),根据场景选择。

在C++中,std::map 默认是按照键(key)进行排序的,且底层基于红黑树实现,不支持直接按值(value)排序。但实际开发中,经常需要根据 value 对 map 元素进行排序。本文介绍几种常用方法来实现 map 按 value 排序 的技巧。
1. 使用 vector 存储 pair 并自定义排序函数
最常见的方式是将 map 中的元素复制到一个 vector 中,每个元素是 key-value 对,然后使用 std::sort 配合自定义比较函数进行排序。
示例代码:
#include
输出结果会按分数从高到低排列。如果要升序,改为 a.second 即可。
立即学习“C++免费学习笔记(深入)”;
2. 使用 std::multimap 实现按 value 排序
由于 map 的 key 唯一,而 multimap 支持重复 key,我们可以将原 map 的 value 作为新 multimap 的 key,原 key 作为 value,从而利用 multimap 自动按键排序的特性实现“按 value 排序”。
示例代码:
#include
注意:multimap 默认是升序,若要降序,可以使用 std::greater 作为模板参数:
std::multimap> sortedByValue;
3. 处理 value 相同的情况
当多个 key 对应相同 value 时,可能还需要按 key 进一步排序。可以在 lambda 中添加二级比较条件。
例如,在按 value 降序的同时,value 相同时按 key 字典序升序:
std::sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) { if (a.second != b.second) return a.second > b.second; return a.first < b.first; });
4. 封装成通用函数
为了提高复用性,可以封装一个函数,接受 map 并返回按 value 排序的 vector:
templatestd::vector<std::pair> sortByValue(const std::map& m) { std::vector<std::pair> vec(m.begin(), m.end()); std::sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) { return a.second > b.second; }); return vec;}
基本上就这些。根据性能要求和使用场景选择合适的方法即可。vector + sort 更灵活,multimap 写法简洁但需注意键值反转带来的限制。
以上就是C++如何对map按value排序_C++关联容器排序与map按值排序技巧的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1485175.html
微信扫一扫
支付宝扫一扫