目录

1:map对于key(键)的排序

2:map对于value(值)的排序


1:map对于key(键)的排序

map中其实是有默认排序的,它里面的构造是用到红黑树,所以它的默认排序是按照键来排序的,并且是按照键的升序来排序的。

我们如果想要对这种排序进行自定义的话,可以通过自己写一个仿函数来解决,至于什么是仿函数,本篇文章不做解释,本篇文章只介绍怎么用(其实是我菜,哈哈哈)!

(1)map中的key的默认排序

#include<bits/stdc++.h>
using namespace std;
//对于map中的key的默认排序map<int,string>m;int main()
{m[1]="iui";m[87]="sjddd";m[2]="jsd";m[67]="yuuuu";for(auto it=m.begin();it!=m.end();it++){cout<<it->first<<" "<<it->second<<endl;}return 0;
}

 (2)对于key的自定义排序

#include<bits/stdc++.h>
using namespace std;
//对于map中的key进行paixustruct rule{bool operator()(string a,string b){return a>b;//对于键是string型按照从大到小排}
};int main()
{//map中的第三个参数其实就是排序规则,之前不写就会默认成默认排序map<string,int,rule>m;m["asas"]=199;m["zx"]=99;m["gsgus"]=878;m["yuy"]=1515;map<string,int,rule>::iterator it;for(it=m.begin();it!=m.end();it++){cout<<it->first<<" "<<it->second<<endl;}return 0;
}

 (3)key是结构体的排序

#include<bits/stdc++.h>
using namespace std;
//按照键是结构体的排序
typedef struct{string name;int score;
}node;
struct rule{bool operator()(node a,node b){if(a.score==b.score){return a.name>b.name;}return a.score>b.score;}
//排序规则是按照成绩大的在前面,相同按照名字降序
};int main()
{node stu;map<node,int,rule>m;stu.name="abc";stu.score=88;m[stu]=1212;stu.name="acd";stu.score=88;m[stu]=1213;stu.name="bcbc";stu.score=100;m[stu]=1214;stu.name="zzzzzz";stu.score=1000;m[stu]=8989;map<node,int,rule>::iterator it;for(it=m.begin();it!=m.end();it++){cout<<"名字="<<it->first.name<<" 成绩="<<it->first.score<<" 学号="<<it->second<<endl;}return 0;
}

当然,还有第二种对于键是结构体的排序方法了

#include<bits/stdc++.h>
using namespace std;
//对于键是结构体的自定义排序
typedef struct node{int score;string name;bool operator <(const node &s)const{if(score!=s.score)return score>s.score;return name>s.name;}
}node;int main()
{map<node,int>m;node u;u.name="abc";u.score=99;m[u]=12;u.name="bcd";u.score=99;m[u]=13;u.name="bbb";u.score=100;m[u]=14;u.name="yuy";u.score=15;m[u]=6666;map<node,int>::iterator it;for(it=m.begin();it!=m.end();it++){cout<<"成绩="<<it->first.score<<" 名字="<<it->first.name<<" 学号="<<it->second<<endl;}return 0;
}

2:map对于value(值)排序

在map中的排序是基于按照key来排序的,所以无法对value直接进行排序,如果想对value进行排序,需要用到vector容器以及sort函数,当然了还有自定义的排序规则(就叫仿函数拉倒),其实也是一套模板而已

#include<bits/stdc++.h>
using namespace std;
//map中对于value排序
//之前说的map是个键值对,所以需要vector
//来接收的话,那么就需要一对一,就需要用到pair了bool cmp(const pair<string,int> a,pair<string,int>b){return a.second>b.second;
}int main()
{map<string,int>m;m["asas"]=18;m["ioio"]=90;m["cj"]=89;vector<pair<string,int>>v(m.begin(),m.end());sort(v.begin(),v.end(),cmp);map<string,int>::iterator it;for(int i=0;i<v.size();i++){cout<<v[i].first<<" "<<v[i].second<<endl;}return 0;
}

C++中的map排序相关推荐

  1. Kotlin中的Map排序

    示例代码如下: fun main() {val map = sortedMapOf(1 to 2, 3 to 1, 2 to 3)println(map) // 输出:{1=2, 2=3, 3=1}p ...

  2. Go语言中 经典的map排序方法及案例 (Golang经典编程案例)

    注意:Golang中的map默认是无序的,每次遍历,得到的输出结果可能不一样. Golang中的map排序: 将map的key放到切片中: 对切片排序: 遍历切片,然后来按key来输出map的值. 案 ...

  3. 对List中的map的key按中文拼音进行排序。

    对List中的map的key按中文拼音进行排序. private static void compareToTest() {Map<String,Object> mapTemp = new ...

  4. java map字典序_java中对map的字典序排序

    java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115& ...

  5. java对list中map集合中某个字段排序

    java对list中map集合中某个字段排序 适用于字符串排序,数字对比不可用,以下示例,当把sort的值改为74,66,142时排序不对看示例2 示例1 List<Map<String, ...

  6. golang 中 map 排序

    golang 中没有专门的 map 排序函数,且 map 默认是无序的,也就是你写入的顺序和打印的顺序是不一样的. m := make(map[string]string, 0) m["on ...

  7. go 中 map 排序

    一 点睛 1 golang 中没有一个专门的方法针对 map 的 key 进行排序. 2 golang 中的 map 默认是无序的,注意也不是按照添加的顺序存放的,每次遍历,得到的输出可能不一样. 3 ...

  8. map写法 scala语言_Scala中的Map使用例子

    Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法. (1)不可变Map 特点: api不太丰富 如果 ...

  9. javascript map 排序_数据结构-JavaScript字典结构的编程实现

    字典是一类特殊的数据元素的集合,字典的基本单元为数对,所谓数对是指类似(key,value)形式的数据.每一个数对结构包括了关键字key与该元素对应的value值,在一个普通字典所组成的数对集合中,关 ...

最新文章

  1. 一位资深程序员面试Python工程师的岗位心得和历程
  2. Java中/r和/n的区别
  3. Python: 大型数组运算
  4. 北航java大作业,北航成人继续教育 本科 计算机科学与技术 JAVA——大作业.doc
  5. componentsJoinedByString 和 componentsSeparatedByString 的方法的区别
  6. 简单链接Simplelink 传感器标签SensorTag
  7. 监督学习-KNN最邻近分类算法
  8. Unity/UE读取OPC UA和OPC DA数据(UE4)
  9. hadoop10---消息队列
  10. DataRow[] /数组转换datatable!
  11. 群晖nas服务器的虚拟机,黑群晖NAS 6.1.6 虚拟机VMWARE傻瓜教程
  12. Unity3D脚本语言的类型系统
  13. 计算机电脑连接wifi,计算机应如何连接到WiFi?笔记本WiFi设置方法[详细步骤]
  14. 中兴iptv机顶盒破解教程图文:亲测中兴B760EV3、B860A、B860AV1.1完美安装应用!非ttl破解![转]
  15. mysql数据库修改约束_mysql约束以及数据库的修改
  16. python破解wifi密码软件下载-python暴力获取wifi密码
  17. hadoop HA 架构
  18. 【成电860考研】《软件工程》-anki卡片知识合集-504张卡片-28000字-上岸资料整理
  19. linux服务器创建wss服务 https+wss配置指南
  20. Win10重装系统提示:在efi系统上windows只能安装到gpt磁盘

热门文章

  1. 8 年开发,连登陆接口都写这么烂...
  2. 盘菩提子串珠盘的是心情
  3. 采用Excel作为设计器的开源中国式报表引擎:NopReport
  4. Qt Quick 3D系列(一):加载3d模型
  5. 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地...
  6. VS2017 CUDA编程学习11:CUDA性能测量
  7. d3.js mysql_D3.js画思维导图(转)
  8. 绘制玫瑰线及变异玫瑰线
  9. English Learning - L3 作业打卡 Lesson1 Day5 2023.5.9 周二
  10. 动物class类图 php,UML系列——类图class