优先队列变优先级.doc
文本预览下载声明
优先队列 默认情况下是按从大到小排列的:
////默认情况,按从大到小排列
#include iostream
#include queue
using namespace std;
int main()
{
int num[10]={14,10,56,7,83,22,36,91,3,47};
priority_queueint q;
for(int i=0;i=9;i++)
{
q.push(num[i]);
}
cout默认情况:endl;
while(!q.empty())
{
int m = q.top();
coutm ;
q.pop();
}
coutendl;
return 0;
}
运行结果:
自定义排序方法:
1:用系统比较函数
////采用优先队列自带的比较函数,greater代表的是按从小到大顺序
//less代表的是从大到小的顺序
#include iostream
#include queue
#include vector
//#include stdlib.h
using namespace std;
int main()
{
int num[10]={14,10,56,7,83,22,36,91,3,47};
priority_queueint,vectorint,greaterint que;/////采取最小优先策略,即按从小到大的顺序排列
priority_queueint,vectorint,lessint que1; ////采取最大优先策略,即按从大到小的顺序排列
for(int i=0;i=9;i++)
{
que.push(num[i]);
que1.push(num[i]);
}
coutgreaterint:endl;
while(!que.empty())
{
int m = que.top();
coutm ;
que.pop();
}
coutendl;
coutlessint:endl;
while(!que1.empty())
{
int m = que1.top();
coutm ;
que1.pop();
}
coutendl;
return 0;
}
运行结果:
比较的元素是float类型,其他类型相似可自己实现下
////采用优先队列自带的比较函数,greater代表的是按从小到大顺序
//less代表的是从大到小的顺序
#include iostream
#include queue
#include vector
//#include stdlib.h
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_queuefloat,vectorfloat,greaterfloat que;/////采取最小优先策略,即按从小到大的顺序排列
priority_queuefloat,vectorfloat,lessfloat que1; ////采取最大优先策略,即按从大到小的顺序排列
for(int i=0;i=9;i++)
{
que.push(num[i]);
que1.push(num[i]);
}
coutgreaterfloat:endl;
while(!que.empty())
{
float m = que.top();
coutm ;
que.pop();
}
coutendl;
coutlessfloat:endl;
while(!que1.empty())
{
float m = que1.top();
coutm ;
que1.pop();
}
coutendl;
return 0;
}
2重载 操作符定义优先级
如果优先队列的元素是结构体类型需要自己写比较函数,标准库默认使用元素类型的 操作符来确定它们之间的优先级关系。//////本例通过重载运算符来改变元素在优先队列里的优越性
#includeiostream
#includequeue
#includestring
using namespace std;
struct student
{
string name;
float score;
/////重载运算符来实现改变优先规则
bool operator (const student s) const
{
//////
显示全部