优先队列

/*栈*/ 
#include<stack>
stack<int> st;
st.empty();
st.size();//返回栈中的元素的个数.
st.pop();
st.push();
st.top();

/*队列*/
#include<queue>
queue<int>q;
q.empty();
q.size();//返回队列中元素的个数.
q.pop();
q.front();//返回队首的位置
q.back();//返回队尾的位置
q.push();

/*优先队列:普通的队列先进先出,队尾进,队头出。而优先队列中,元素被赋予优先级,当访问元素时,具有最高优先级的元素最先取出。*/
#include<queue>
q.empty();
q.size();
q.pop();//删除队首元素
q.push(item);//基于优先级,插入新元素
q.top();//返回具有最高优先级的元素

 

 

//下面是优先队列的基本使用,(&可以省略)
#include<queue>
#include<functional>
#include<vector>
using namespace std;
//定义比较结构,使用运算符重载,自定义优先级1
struct cmp1
{
	bool operator()(int &a,int &b)
	{
		return a>b;//最少值优先.
	}
}; 
struct cmp2
{
	bool operator()(int &a,int &b)
	{
		return a<b;//最大值优先. 
	}
}; 
//定义结构,使用运算符重载,自定义优先级2 
struct number1  
{  
    int x;  
    bool operator<(const number1 &a) const  
    {  
        return x>a.x;//最小值优先  
    }  
};  
struct number2  
{  
    int x;  
    bool operator<(const number2 &a) const  
    {  
        return x<a.x;//最大值优先  
    }  
}; 
int a[]= {14,10,56,7,83,22,36,91,3,47,72,0};  
number1 num1[]= {14,10,56,7,83,22,36,91,3,47,72,0};  
number2 num2[]= {14,10,56,7,83,22,36,91,3,47,72,0};  
  
int main()  
{  
    priority_queue<int>que;//采用默认优先级构造队列,从大到小排序。  
    priority_queue<int,vector<int>,cmp1>que1;//最小值优先  
    priority_queue<int,vector<int>,cmp2>que2;//最大值优先   
    priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,  
    priority_queue<int,vector<int>,less<int> >que4;//最大值优先   
    priority_queue<number1>que5; //最小优先级队列  
    priority_queue<number2>que6;  //最大优先级队列  
  
    int i;  
    for(i=0; a[i]; i++)  
    {  
        que.push(a[i]);  
        que1.push(a[i]);  
        que2.push(a[i]);  
        que3.push(a[i]);  
        que4.push(a[i]);  
	}
    for(i=0; num1[i].x; i++)  
        que5.push(num1[i]);  
    for(i=0; num2[i].x; i++)  
        que6.push(num2[i]);  
    //默认,则是从大到小排序,91 83 72 56 47 36 22 14 10  7  3 ,91是头部。
    while(!que.empty())  
    {  
        printf("%3d",que.top());  
        que.pop();  
    }   
	//priority_queue<int,vector<int>,cmp1>que1;最小值优先 
    while(!que1.empty())  
    {  
        printf("%3d",que1.top());  
        que1.pop();  
    } //3  7 10 14 22 36 47 56 72 83 91
	//priority_queue<int,vector<int>,cmp2>que2;//最大值优先 
    while(!que2.empty())  
    {  
        printf("%3d",que2.top());  
        que2.pop();  
    }  
	//priority_queue<int,vector<int>,greater<int> >que3;最小值优先
    while(!que3.empty())  
    {  
        printf("%3d",que3.top());  
        que3.pop();  
    }  // 3  7 10 14 22 36 47 56 72 83 91
     
    //priority_queue<int,vector<int>,less<int> >que4;//最大值优先
    while(!que4.empty())  
    {  
        printf("%3d",que4.top());  
        que4.pop();  
    }  //91 83 72 56 47 36 22 14 10  7  3
      
    //priority_queue<number1>que5; 最小优先级队列  
    while(!que5.empty())  
    {  
        printf("%3d",que5.top());  
        que5.pop();  
    }  //3  7 10 14 22 36 47 56 72 83 91 

    //priority_queue<number2>que6; 最大优先级队列 
    while(!que6.empty())  
    {  
        printf("%3d",que6.top());  
        que6.pop();  
    }  //91 83 72 56 47 36 22 14 10  7  3 
     
    return 0;  
}  

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值