Algorithm 简单优先队列

本文通过三个示例介绍优先队列的基本用法:包括整数的默认从大到小排序、通过自定义比较器实现从小到大排序,以及使用结构体进行复杂数据类型的排序。
#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 ;
}








 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值