C++中的map排序
目录
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排序相关推荐
- 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 ...
- Go语言中 经典的map排序方法及案例 (Golang经典编程案例)
注意:Golang中的map默认是无序的,每次遍历,得到的输出结果可能不一样. Golang中的map排序: 将map的key放到切片中: 对切片排序: 遍历切片,然后来按key来输出map的值. 案 ...
- 对List中的map的key按中文拼音进行排序。
对List中的map的key按中文拼音进行排序. private static void compareToTest() {Map<String,Object> mapTemp = new ...
- java map字典序_java中对map的字典序排序
java中对map的字典序排序,算法验证比对微信官网https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115& ...
- java对list中map集合中某个字段排序
java对list中map集合中某个字段排序 适用于字符串排序,数字对比不可用,以下示例,当把sort的值改为74,66,142时排序不对看示例2 示例1 List<Map<String, ...
- golang 中 map 排序
golang 中没有专门的 map 排序函数,且 map 默认是无序的,也就是你写入的顺序和打印的顺序是不一样的. m := make(map[string]string, 0) m["on ...
- go 中 map 排序
一 点睛 1 golang 中没有一个专门的方法针对 map 的 key 进行排序. 2 golang 中的 map 默认是无序的,注意也不是按照添加的顺序存放的,每次遍历,得到的输出可能不一样. 3 ...
- map写法 scala语言_Scala中的Map使用例子
Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法. (1)不可变Map 特点: api不太丰富 如果 ...
- javascript map 排序_数据结构-JavaScript字典结构的编程实现
字典是一类特殊的数据元素的集合,字典的基本单元为数对,所谓数对是指类似(key,value)形式的数据.每一个数对结构包括了关键字key与该元素对应的value值,在一个普通字典所组成的数对集合中,关 ...
最新文章
- 一位资深程序员面试Python工程师的岗位心得和历程
- Java中/r和/n的区别
- Python: 大型数组运算
- 北航java大作业,北航成人继续教育 本科 计算机科学与技术 JAVA——大作业.doc
- componentsJoinedByString 和 componentsSeparatedByString 的方法的区别
- 简单链接Simplelink 传感器标签SensorTag
- 监督学习-KNN最邻近分类算法
- Unity/UE读取OPC UA和OPC DA数据(UE4)
- hadoop10---消息队列
- DataRow[] /数组转换datatable!
- 群晖nas服务器的虚拟机,黑群晖NAS 6.1.6 虚拟机VMWARE傻瓜教程
- Unity3D脚本语言的类型系统
- 计算机电脑连接wifi,计算机应如何连接到WiFi?笔记本WiFi设置方法[详细步骤]
- 中兴iptv机顶盒破解教程图文:亲测中兴B760EV3、B860A、B860AV1.1完美安装应用!非ttl破解![转]
- mysql数据库修改约束_mysql约束以及数据库的修改
- python破解wifi密码软件下载-python暴力获取wifi密码
- hadoop HA 架构
- 【成电860考研】《软件工程》-anki卡片知识合集-504张卡片-28000字-上岸资料整理
- linux服务器创建wss服务 https+wss配置指南
- Win10重装系统提示:在efi系统上windows只能安装到gpt磁盘
热门文章
- 8 年开发,连登陆接口都写这么烂...
- 盘菩提子串珠盘的是心情
- 采用Excel作为设计器的开源中国式报表引擎:NopReport
- Qt Quick 3D系列(一):加载3d模型
- 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地...
- VS2017 CUDA编程学习11:CUDA性能测量
- d3.js mysql_D3.js画思维导图(转)
- 绘制玫瑰线及变异玫瑰线
- English Learning - L3 作业打卡 Lesson1 Day5 2023.5.9 周二
- 动物class类图 php,UML系列——类图class