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