Algorithm 简单优先队列

时间:2021-05-19 17:36:41
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>

using namespace std ;

#define MAXN 5

//先是最简单的优先队列

priority_queue <int> q ;//如果我什么都没有定义就这样写的话
//这个优先队列会按照从大到小排序

int main(){

int len[MAXN] = { 5 , 8 , 3 ,11 ,10 } ;
int i ;

for(i = 0 ; i < MAXN ; i++){

q.push(len[i]) ;
}
while(!q.empty()){

cout<<q.top()<<" " ;//这时候输出的结果是 11 10 8 5 3
q.pop() ;
}

return 0 ;
}

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>

using namespace std ;

#define MAXN 5

//先是最简单的优先队列

priority_queue <int , vector<int> , greater<int> > q ;//如果你没写的话,那么默认的是从大到小
                                                      //这样写了之后就是从小到大了
              

int main(){

    int len[MAXN] = { 5 , 8 , 3 ,11 ,10 } ;
    int  i ;

    for(i = 0 ; i < MAXN ; i++){
    
        q.push(len[i]) ;
    }
    while(!q.empty()){
    
        cout<<q.top()<<" " ;//这时候输出的结果是 3 5 8 10 11  
        q.pop() ;
    }

    return 0 ;
}

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>

using namespace std ;

#define MAXN 5

//下面说一下结构体的优先队列

typedef struct node{

    friend bool operator <(node n1 ,node n2 ){
    
        return n1.priority < n2.priority ;//从大到小 以priority来排序
    }

    int priority ;
    int value ;
}Node ;


priority_queue <node> q ;

int main(){

    Node len[MAXN] ;
    
    len[0].priority = 5; len[0].value = 1;
    len[1].priority = 8; len[1].value = 2;
    len[2].priority = 3; len[2].value = 3;
    len[3].priority = 11; len[3].value = 4;
    len[4].priority = 10; len[4].value = 5;

    int  i ;

    for(i = 0 ; i < MAXN ; i++){
    
         q.push(len[i]) ;
    }
    while(!q.empty()){
    
        cout<<q.top().priority <<" " ;//这时候输出的结果是 11 4 ,10 5 ,8 2 ,5 1 ,3 3                                  
        cout<<q.top().value <<" " ;
        cout <<endl ;
        q.pop() ;
    }

    return 0 ;
}