STL priority_queue 優先順序設定 基本資料型別&結構體
阿新 • • 發佈:2021-02-08
技術標籤:c/c++
#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;
}
執行效果: