优先队列变优先级
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
优先队列默认情况下是按从大到小排列的:
////默认情况,按从大到小排列
#include
#include
using namespace std;
int main()
{
int num[10]={14,10,56,7,83,22,36,91,3,47};
priority_queue
for(int i=0;i<=9;i++)
{
q.push(num[i]);
}
cout<<"默认情况:"< while(!q.empty()) { int m = q.top(); cout< q.pop(); } cout< return 0; } 运行结果: 自定义排序方法: 1:用系统比较函数 ////采用优先队列自带的比较函数,greater代表的是按从小到大顺序 //less代表的是从大到小的顺序 #include #include #include //#include using namespace std; int main() { int num[10]={14,10,56,7,83,22,36,91,3,47}; priority_queue priority_queue for(int i=0;i<=9;i++) { que.push(num[i]); que1.push(num[i]); } cout<<"greater while(!que.empty()) { int m = que.top(); cout< que.pop(); } cout< cout<<"less while(!que1.empty()) { int m = que1.top(); cout< que1.pop(); } cout< return 0; } 运行结果: 比较的元素是float类型,其他类型相似可自己实现下 ////采用优先队列自带的比较函数,greater代表的是按从小到大顺序 //less代表的是从大到小的顺序 #include #include #include //#include using namespace std; int main() { float num[10]={14.2,10.1,56.1,7.1,83.1,22.2,36.1,91.2,3.1,47.2}; priority_queue priority_queue for(int i=0;i<=9;i++) { que.push(num[i]); que1.push(num[i]); } cout<<"greater while(!que.empty()) { float m = que.top(); cout< que.pop(); } cout< cout<<"less while(!que1.empty()) { float m = que1.top(); cout< que1.pop(); } cout< return 0; } 2重载< 操作符定义优先级 如果优先队列的元素是结构体类型需要自己写比较函数,标准库默认是使用元素类型的< 操作符来确定它们之间的优先级关系。 //////本例通过重载<运算符来改变元素在优先队列里的优越性 #include #include #include using namespace std; struct student { string name; float score; /////重载<运算符来实现改变优先规则 bool operator < (const student &s) const { //////按score由小到大排列 return s.score //////按score由大到小排列 //return s.score>score; } }; int main() { priority_queue student stu; = "lixiang"; stu.score = 80.0; pq.push(stu); = "renyabo"; stu.score = 70.0; pq.push(stu); = "wangshan"; stu.score = 90.0; pq.push(stu); /////入队元素,初始化队列 while(!pq.empty()) { stu = pq.top(); cout<<<<" "< pq.pop(); } return 0; } 运行结果: