sort()和优先队列的总结
2014-07-18 16:05 gongti 阅读(850) 评论(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)通过