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数据结构之选择排序算法的实现与优化 选择排序算法的原理 选择排序是一种简单直观的排序算法,它的基本思想是:从待排序的数据中选出最小的数,将其放在首位;再从剩余的数据中选出最小的数,放在已排序数据的末尾;以此类推,直到所有数据均已排序完毕。 选择排序的时间复杂度为O(n²),空间复杂度为O(1)。相比于其他排序算法,选择排序的代码实现简单、易于理解。 …

    Java 2023年5月19日
    00
  • 使用spring aop统一处理异常和打印日志方式

    使用Spring AOP是一种非常方便的方式,可以实现对异常和日志的统一处理。下面是使用Spring AOP实现统一处理异常和打印日志的完整攻略。 1. 异常处理 1.1 创建异常类 首先需要创建一个自定义异常类,例如: public class MyException extends RuntimeException { public MyExceptio…

    Java 2023年5月27日
    00
  • Spring security实现登陆和权限角色控制

    下面我来为你详细讲解“Spring Security实现登录和权限角色控制”的完整攻略。 什么是Spring Security? Spring Security是Spring框架的安全性框架,用于保护Java应用程序。 它为应用程序提供了身份验证和授权服务。 它在应用程序中实现安全性功能,如身份验证,授权和身份验证记住我等功能,并保护应用程序免受常见的攻击,…

    Java 2023年5月20日
    00
  • json原理分析及实例介绍

    JSON原理分析及实例介绍 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,可读性强,易于阅读和编写。相较于XML,它更加简洁,结构清晰,传输效率更高,被广泛应用于Web前端和后端的数据交互。 JSON数据以键值对的形式组合而成,通过逗号分隔。其中,键必须是字符串类型,而值则可以是字符串、数字、布尔…

    Java 2023年5月26日
    00
  • json显示日期带T问题的解决方法

    当我们使用JSON格式传输日期时,日期常常会带有T字符,例如:2019-09-30T10:30:00。这是因为该日期字符串遵循ISO 8601标准,用于表示日期和时间的格式化方式。但是,该格式不太友好,可能会给用户造成困扰。那么,接下来我将为大家详细讲解如何解决这个问题。 方法一:自定义JSON序列化器 我们可以自定义一个JSON序列化器,将日期格式化为自定…

    Java 2023年5月26日
    00
  • Java之JSP教程九大内置对象详解(上篇)

    下面我来详细讲解“Java之JSP教程九大内置对象详解(上篇)”的完整攻略。 什么是九大内置对象? JSP的九大内置对象是指在JSP页面中JSP引擎默认提供的九个对象,包括request、response、session、application、page、out、config、pageContext、exception对象。 request对象 reques…

    Java 2023年5月26日
    00
  • 用python将pdf转化为有声读物

    将PDF转化为有声读物的过程需要使用 Python 中的两个主要库:1. PyPDF2: 用于解析 PDF 文件。2. pyttsx3: 文字转语音库 – 与文本转语音有关。 下面是一个步骤示例,如何在Python中使用PyPDF2和pyttsx3将PDF文档转换为有声读物: 步骤 1 – 安装 PyPDF2 和 pyttsx3 库 在命令提示符中输入以下命…

    Java 2023年6月15日
    00
  • 什么是 JVM 性能分析工具?

    以下是关于 JVM 性能分析工具的完整使用攻略: 什么是 JVM 性能分析工具? JVM 性能分析工具是用来分析 Java 程序在 JVM 上的性能表现的工具。通过使用 JVM 性能分析工具,可以找出程序中的性能瓶颈,优化程序的性能,提高程序的运行效率。 常见的 JVM 性能分析工具包括以下几种: 1. JConsole JConsole 是 JDK 自带的…

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