C++如何对map按value排序_C++关联容器排序与map按值排序技巧


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

c++如何对map按value排序_c++关联容器排序与map按值排序技巧

在C++中,std::map 默认是按照键(key)进行排序的,且底层基于红黑树实现,不支持直接按值(value)排序。但实际开发中,经常需要根据 value 对 map 元素进行排序。本文介绍几种常用方法来实现 map 按 value 排序 的技巧。

1. 使用 vector 存储 pair 并自定义排序函数

最常见的方式是将 map 中的元素复制到一个 vector 中,每个元素是 key-value 对,然后使用 std::sort 配合自定义比较函数进行排序。

示例代码:

Primeshot Primeshot

专业级AI人像摄影工作室

Primeshot 36 查看详情 Primeshot
#include <map>
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::map<std::string, int> scoreMap = {
        {"Alice", 85},
        {"Bob", 92},
        {"Charlie", 78},
        {"Diana", 96}
    };

    // 将 map 转为 vector<pair>
    std::vector<std::pair<std::string, int>> vec;
    for (const auto& item : scoreMap) {
        vec.push_back(item);
    }

    // 按 value 降序排序
    std::sort(vec.begin(), vec.end(),
        [](const auto& a, const auto& b) {
            return a.second > b.second;
        });

    // 输出结果
    for (const auto& item : vec) {
        std::cout << item.first << ": " << item.second << "\n";
    }

    return 0;
}

输出结果会按分数从高到低排列。如果要升序,改为 a.second 即可。

2. 使用 std::multimap 实现按 value 排序

由于 map 的 key 唯一,而 multimap 支持重复 key,我们可以将原 map 的 value 作为新 multimap 的 key,原 key 作为 value,从而利用 multimap 自动按键排序的特性实现“按 value 排序”。

示例代码:

#include <map>
#include <multimap>
#include <iostream>

int main() {
    std::map<std::string, int> scoreMap = {
        {"Alice", 85},
        {"Bob", 92},
        {"Charlie", 78},
        {"Diana", 96}
    };

    std::multimap<int, std::string> sortedByValue;

    for (const auto& item : scoreMap) {
        sortedByValue.insert({item.second, item.first});
    }

    // 从小到大输出
    for (const auto& item : sortedByValue) {
        std::cout << item.second << ": " << item.first << "\n";
    }

    return 0;
}

注意: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:

template<typename K, typename V>
std::vector<std::pair<K, V>> sortByValue(const std::map<K, V>& m) {
    std::vector<std::pair<K, V>> 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按值排序技巧的详细内容,更多请关注其它相关文章!


# ai  # go  # 复用  # 自定义  # 升序  # 排列  # stream  # ios  # c++  # 文山网站建设推广外包  # 网站建设类型怎么填写  # 石家庄做网站seo优化怎么做  # 达州微小网站建设招标  # 网站推广计划怎么写好呢  # 关键词排名公司就找vs火20星  # 集团网站建设建议和意见  # 网站SEO优化诊断工具  # 深圳宝安关键词排名  # 雨尘seo  # 多路  # 将原  # 管理机制  # 如何实现  # 何为  # 降序  # 都是 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 京东物流快递破损了怎么办_京东快递破损理赔流程  《漫蛙manwa2》防走失网页版链接2025  Coolpad5890 ROM刷机包  《i莞家》修改昵称方法  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  《大学搜题酱》官网地址登录  电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】  我的世界游戏平台入口 我的世界官方官网直达链接  解决CSS background 属性中 cover 关键字的常见误用  AO3官方镜像链接 | 最新防走失网址永久收藏  J*aScript实现网页表单实时输入字段比较与验证教程  《密马》发布账号方法  2025考研成绩查询时间入口分享  苹果手机手电筒无法开启  多闪电脑版下载_多闪PC端模拟器使用  汽水音乐网页版登录 汽水音乐网页端官方入口  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  什么是Satis,如何用它搭建一个私有的composer仓库?  酷狗音乐多音轨设置教程  《下一站江湖2》风神腿获取攻略  C++如何实现单例模式_C++线程安全的单例模式写法  阿里云共享相册入口在哪  139邮箱登录入口官网 139邮箱登录入口官网网址  抖音赚钱快速入门_新手必看的抖音赚钱步骤  鸣潮历史学家灯塔位置一览  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  漫蛙漫画直连入口 _ manwa官方备用入口实时检测  厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】  Python测试中模块导入路径解析的最佳实践  iPhone14无法连接蓝牙设备如何解决  申通快递查询 申通物流快递单实时查询入口  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  小米civi如何设置锁屏时间  如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色  济南公交卡手机充值指南  《理想汽车》权限管理设置方法  抖音小程序怎么开通?小程序开通条件是什么?  风神瞳获取全攻略  火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  poki官网最新入口 poki小游戏大全入口  处理含命名空间的XML文件 Power Query中的高级技巧  支付宝网页版在线入口 支付宝官网电脑登录入口  《七读免费小说》开通会员方法  偃武诸葛亮阵容搭配推荐  美发店速赢秘籍  江苏大剧院会员卡购买步骤 

 2025-11-21

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.