map实现按value升序排序

要实现map按 value 升序排序,可以借助 C++ 中的 STL 库中的 sort() 函数来实现。

具体步骤如下:

  1. 将map的键值对推入到一个vector中。

  2. 通过 sort() 函数对vector中的元素按照关键字升序排序。

  3. 将排序后的向量元素重新填充到map中。

以下是详细的代码实现:

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;

//  比较函数,将map键值按照value升序排列
bool compare(const pair<int, int>& a, const pair<int, int>& b){
    return a.second < b.second;
}

int main()
{
    // 定义一个map对象
    map<int, int> myMap = {
        {1, 6}, 
        {2, 5}, 
        {3, 8}, 
        {4, 1},
        {5, 3}
    };

    // 将map中的元素推入到vector中
    vector<pair<int, int>> vec;
    for(auto itr = myMap.begin(); itr != myMap.end(); ++itr){
        vec.push_back(make_pair(itr->first, itr->second));
    }

    // 对vector中的元素按值进行升序排序
    sort(vec.begin(), vec.end(), compare);

    // 清空map
    myMap.clear();

    // 将已经排好序的vector元素插入到map
    for(auto itr = vec.begin(); itr != vec.end(); ++itr){
        myMap.insert(make_pair(itr->first, itr->second));
    }

    //  遍历map中排序后的元素
    for(auto itr = myMap.begin(); itr != myMap.end(); ++itr){
        cout << "key: " << itr->first << ", value: " << itr->second << endl;
    }

    return 0;
}

输出结果:

key: 4, value: 1
key: 5, value: 3
key: 2, value: 5
key: 1, value: 6
key: 3, value: 8

另外一种实现方式是利用 lambda 函数作为 compare 函数。实现代码如下:

auto compare = [](const pair<int, int>& a, const pair<int, int>& b){
    return a.second < b.second;};
sort(vec.begin(), vec.end(), compare);

这种方式需要 C++ 11 及以上的版本才能有效运行。

注:以上代码示例可以在devcpp 5.11下直接编译运行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:map实现按value升序排序 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 详解Java事件编程的使用

    详解Java事件编程的使用 什么是Java事件编程? 在Java编程中,事件是指程序或用户可以监测到并有可能做出反应的操作或通知。Java事件编程是基于事件模型的一种编程方法,也是一种事件驱动的编程方式。 事件驱动编程的核心在于将程序设计为一个能够响应特定事件的系统。在这种模式下,程序设计者无需关注具体的事件何时发生,只需要定义如何响应事件即可。 Java事…

    Java 2023年5月23日
    00
  • Java非侵入式API接口文档工具apigcc用法详解

    Java非侵入式API接口文档工具apigcc用法详解 概述 apigcc是一款非侵入式的API接口文档生成工具,可以帮助Java开发人员快速生成符合RESTful标准的API接口文档,同时支持多种API文档输出格式,包括HTML、Markdown、PDF等格式。 安装 apigcc可以通过npm安装,使用如下命令即可: npm install apigcc…

    Java 2023年5月20日
    00
  • MyBatis的嵌套查询解析

    MyBatis是一个非常强大的ORM框架,为开发人员提供了很多便利,其中嵌套查询是其功能之一,主要用于处理某个表或视图中某些字段需要查询其他表或视图得到对应值的情况。这里提供一个详细的攻略,帮助开发者掌握MyBatis中嵌套查询的使用。 什么是嵌套查询 嵌套查询是MyBatis中一种复杂的查询操作。它是在一个查询语句中,嵌套了另外的查询语句。在这个过程中,可…

    Java 2023年5月20日
    00
  • 解决Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题

    针对Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题,可以参考以下攻略: 问题描述 在Spring Boot的应用中,我们常常会使用Java 8的新特性,如LocalDate等时间日期API。在使用Feign进行服务间调用时,可能会遇到序列化问题,导致时间日期类不能正确转换。具体表现为服务A传递Local…

    Java 2023年5月20日
    00
  • 从搭建Struts2 开发环境说起

    下面我将详细介绍“从搭建Struts2 开发环境说起”的完整攻略。 1. 安装Java环境 在使用 Struts2 开发前,首先需要安装 Java 开发环境。可以到官网下载并安装 JDK,这里我以 JDK 1.8 为例。 下载JDK 1.8安装包,并安装到你的电脑上。 配置JAVA_HOME环境变量,将JDK安装路径添加到PATH环境变量中,以便在命令行中可…

    Java 2023年5月20日
    00
  • jstack+jdb命令查看线程及死锁堆栈信息的实例

    欢迎阅读本文,以下是使用jstack和jdb命令查看线程及死锁堆栈信息的实例攻略。 1.什么是jstack和jdb jstack是Java开发工具包(JDK)中的一个命令行工具,可以用于在运行时查看Java虚拟机中各个线程的状态、堆栈信息以及死锁等信息。 jdb也是JDK中的一个命令行工具,是Java Debugger的缩写,可以在运行时通过命令行调试Jav…

    Java 2023年5月26日
    00
  • Java Apache Commons报错“ArrayIndexOutOfBoundsException”的原因与解决方法

    当使用Java的Apache Commons类库时,可能会遇到“ArrayIndexOutOfBoundsException”错误。这个错误通常由以下原因之一起: 数组下标越界:如果数组下标越界,则可能会出现此错误。在这种情况下,需要检查数组下标以解决此问题。 数组为空:如果数组为空,则可能会出现此错误。在这种情况下,需要检查数组是否为空以解决此问题。 以下…

    Java 2023年5月5日
    00
  • java编程实现杨辉三角两种输出结果实例代码

    下面是“java编程实现杨辉三角两种输出结果实例代码”的完整攻略。 什么是杨辉三角? 杨辉三角是二项式系数在三角形中的一种几何排列,中文名称又称“杨辉三角形”,它形状如下图所示: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 … … … 如何用java编程实现杨辉三角? 第一种实现方式 下面是用java编…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部