1. 程式人生 > 其它 >STL priority_queue 優先順序設定 基本資料型別&結構體

STL priority_queue 優先順序設定 基本資料型別&結構體

技術標籤: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; }

執行效果:
在這裡插入圖片描述