sort()和优先队列的总结
2014-07-18 16:05 gongti 阅读(865) 评论(0) 收藏 举报一、关于sort函数
sort()排序函数默认是从小到大,
a={5,3,2,1,6 };sort(a,a+n);//输出是1 2 3 5 6
这里如果要从到小排序,则有两种方式可以满足
(1)写一个cmp()函数,定义大小关系
bool cmp(int a,int b){return a>b;}a={5,3,2,1,6}sort(a,a+5,cmp)
(2)直接使用
a={5,3,2,1,6}sort(a,a+5,greater<int>()) //注意后面的()不能少
以上都是sort()函数针对简单数据类型的。对结构体的排序如下:
(1)写一个cmp函数,定义结构体的大小关系
struct Point{int x,y;}p[maxn];bool cmp(Point a,Point b){return a.x<b.x;//按照x从小到大排序}
(2)在结构体里面重载运算符<
struct Point{int x,y;bool operator< (const Point& a) const{return x>a.x;//x从大到小排序}}p[maxn];sort(p,p+n);
如果要想结构体也能使用greater<Point>()和less<Point>()
则:
要使用greater<Point>() 需要重载">"
要使用less<Point>() 需要重载"<"
二、关于优先队列
优先队列的默认排序是从大到小。
int num[10]={14,10,56,7,83,22,36,91,3,47};priority_queue<int> q;
自定义排序方法:
(1)使用系统的比较函数
int num[10]={14,10,56,7,83,22,36,91,3,47};priority_queue<int,vector<int>,greater<int> > que;/////采取最小优先策略,即按从小到大的顺序排列priority_queue<int,vector<int>,less<int> > que1; ////采取最大优先策略,即按从大到小的顺序排列
(2)重载<操作符定义优先级
struct student{string name;float score;/////重载<运算符来实现改变优先规则bool operator < (const student &s) const{//////按score由小到大排列return score>s.score//////按score由大到小排列;//return score<s.score;}};
(3)通过
浙公网安备 33010602011771号