#include <stdio.h>
#include <queue>
#include <string>
#include <iostream>
using namespace std;
struct fruit{
string name;
double price;
friend bool operator <(fruit f1,fruit f2){
/*要定义结构体的比较方法,需要重新定义小于符号。(只需要定义小于符号)
小于还是小于的话是按照从大到小的优先级,小于定义成大于的话是从小到大的优先级。*/
return f1.price>f2.price;
}
};
struct cmp{
bool operator()(fruit f1,fruit f2){
return f1.price<f2.price;
}
};
int main(){
//基本数据类型优先级设置
priority_queue<int,vector<int>,less<int> > pq;
//less<int>表示数字大的优先级大,greater<int>表示数字小的优先级大。
pq.push(1);
pq.push(5);
pq.push(4);
pq.push(8);
int s=pq.size();
for(int i=0;i<s;i++){
printf("%d ",pq.top());
pq.pop();
}
printf("\n");
fruit b;
b.name="banana";
b.price=12.56;
fruit a;
a.name="apple";
a.price=2.9;
fruit c;
c.name="cherry";
c.price=100;
//第一种结构体优先对定义方式:在结构体中重载小于符号
priority_queue<fruit> fq;
fq.push(a);
fq.push(b);
fq.push(c);
s=fq.size();
for(int i=0;i<s;i++){
cout<<fq.top().name<<" "<<fq.top().price<<endl;
fq.pop();
}
//第二种结构体优先队定义方式:使用cmp结构体
priority_queue<fruit,vector<fruit>,cmp> fq1;
fq1.push(a);
fq1.push(b);
fq1.push(c);
s=fq1.size();
for(int i=0;i<s;i++){
cout<<fq1.top().name<<" "<<fq1.top().price<<endl;
fq1.pop();
}
return 0;
}
运行效果: