博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL中sort、priority_queue、map、set的自定义比较函数
阅读量:6348 次
发布时间:2019-06-22

本文共 3285 字,大约阅读时间需要 10 分钟。

STL中,sort的默认排序为less,也就是说从小到大排序;priority_queue默认是less,也就说大顶堆;map默认是less,也就说用迭代器迭代的时候默认是小的排在前面;set默认是less,也就是说用迭代器迭代的时候是从小到大排序的。

1、sort

#include 
#include
#include
using namespace std;bool comp(const int& a, const int& b ){ return a < b ; //从小到大}struct cmp{ bool operator()( const int& a , const int& b ) const{ return a < b ; //从小到大 }} ;int main(){ int array[] = {1 ,5 ,4, 10 , 3, 6 } ; sort( array , array+6 ) ; //以默认的less
()排序 sort( array , array+6 , greater
() ) ; //从大到小排序 sort( array , array+6 , comp ) ; sort( array , array+6 , cmp() ) ;//使用仿函数 for(int i=0;i<6;++i) printf("%d ",array[i]); printf("\n"); return 0 ;}

2、priority_queue

#include 
#include
using namespace std ;struct cmp{ bool operator()( const int& a , const int& b )const{ return a < b ; //大顶堆 }};struct Node{ int x, y ; Node(int _x, int _y ):x(_x),y(_y){} bool operator <(const Node& n1)const{ if( x < n1.x ) return true ; //按照x为第一关键字由大到小排序 else if( x == n1.x ) return y < n1.y ; //y为第二关键字由大到小排序 else return false ; }} ;int main(){ //priority_queue
q ; //优先队列默认是less,大顶堆 ; //priority_queue
,cmp> q ; priority_queue< Node > q ; for(int i=0;i<10;i++) q.push( Node( rand() , rand() ) ); while( !q.empty() ){ printf("%d %d\n",q.top().x , q.top().y ) ; q.pop() ; } return 0 ;} 还可以在构造函数中进行比较运算符的初始化。 例如:
#include
#include
#include
#include
using namespace std; //小根堆bool cmp(int a,int b){ return a>b;}int main(){ int ia[9]={
0,1,2,3,4,8,9,3,5}; priority_queue
,bool (*)(int,int)> ipq(ia,ia+9,cmp); //默认参数要从左到右开始指定 cout<<"size=" <
<

3、map

 

#include
#include
using namespace std;struct cmp{ bool operator()( const int& a, const int& b ) const{ return a < b ; //从小到大; }};int main(){ //map
> mp ; //从大到小 map
mp ; for(int i=0;i<10;++i) mp.insert( map
::value_type(rand() ,i) ) ; map
::iterator it = mp.begin() ; for( ;it!=mp.end() ;it++) printf("%d %d\n",(*it).first , (*it).second ); return 0 ;}

 

4、set

#include 
#include
#include
#include
using namespace std;struct cmp{ bool operator()( const int& a , const int& b )const{ return a < b ; //从小到大 }} ;int main(){ //set
s ; set
s ; for(int i=0;i<10;i++) s.insert( rand() ) ; set
::iterator it = s.begin() ; for( ; it!=s.end();it++) printf("%d\n",*it); return 0 ;} 令一种比较函数的声明方式,在构造函数中初始化:
#include 
#include
#include
#include
using namespace std;struct cmp{ bool operator()( const int& a , const int& b )const{ return a < b ; //从小到大 }} ;bool mycmp(int a,int b){ return a
s ; set
s(mycmp) ; for(int i=0;i<10;i++) s.insert( rand() ) ; set
::iterator it = s.begin() ; for( ; it!=s.end();it++) printf("%d\n",*it); return 0 ;}
 

转载地址:http://pgpla.baihongyu.com/

你可能感兴趣的文章
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
网易音乐版轮播-react组件版本
查看>>
ES6 - 函数与剩余运算符
查看>>
你对position了解有多深?看完这2道有意思的题你就有底了...
查看>>
WebSocket跨域问题解决
查看>>
ECMAScript6基本介绍
查看>>
世界经济论坛发布关于区块链网络安全的报告
查看>>
巨杉数据库加入CNCF云原生应用计算基金会,共建开源技术生态
查看>>
Ubuntu 16.04安装Nginx
查看>>
从 JS 编译原理到作用域(链)及闭包
查看>>
flutter 教程(一)flutter介绍
查看>>
CSS面试题目及答案
查看>>
【从蛋壳到满天飞】JS 数据结构解析和算法实现-Arrays(数组)
查看>>
每周记录(三)
查看>>
Spring自定义注解从入门到精通
查看>>
笔记本触摸板滑动事件导致连滑的解决方式
查看>>
Runtime 学习:消息传递
查看>>
你了解BFC吗?
查看>>
linux ssh tunnel使用
查看>>
十、详解FFplay音视频同步
查看>>