优先队列变优先级

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 q;

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,greater > que;/////采取最小优先策略,即按从小到大的顺序排列

priority_queue,less > que1; ////采取最大优先策略,即按从大到小的顺序排列

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,greater > que;/////采取最小优先策略,即按从小到大的顺序排列

priority_queue,less > que1; ////采取最大优先策略,即按从大到小的顺序排列

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 pq;

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;

}

运行结果:

相关文档
最新文档