首页 > 代码库 > sort()和优先队列的总结
sort()和优先队列的总结
一、关于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)通过
来自为知笔记(Wiz)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。