優先佇列(Priority_queue

priority_queue的函數

empty() 如果優先佇列為空,則返回真 
pop() 刪除第一個元素 
push() 加入一個元素 
size() 返回優先佇列中擁有的元素的個數 
top() 返回優先佇列中有最高優先順序的元素    //這點要注意,不是front()

要注意的是priority_queue中的三個參數,後兩個可以省去,因為有默認參數,如果有第三個參數的話,必定要寫第二個參數。

priority_queue和一般的queue不一樣的是取head元素,一般的queue是q.front(),priority_queue是q.top()

STL中priority_queue默認是大根堆

要改變priority_queue中的優先級排序方法,我看到網上一般有兩種:

方法1:
小根堆:greater<TYPE>
大根堆:less<TYPE>要改寫比較函數一定要把三個參數都帶進去
priority_queue<int,vector<int>,greater<int> >q;     //最後兩個> >之間要有空格

方法2:
struct cmp{
	   bool operator()(const int &a,const int &b) 
   	    {   
             return a>b;//按降序排序,小根堆 
            }
          };
priority_queue<int,vector<int>,cmp>q;  //定義的時候要把cmp放到第三個參數的位置
//poj3253用到


如果優先隊列的類型是struct而非integer等一般類型則可以
struct mse{  
	   char msg[30];  
	   int pri,para,k;
	  }message;
bool operator<(mse a,mse b)  //重新定義<
{   if(a.pri==b.pri)      
	return a.k>b.k;   
      return a.pri>b.pri;
}    
//第一優先級是pri,第二優先級是k,pri越小優先級越大;如果pri相等,則比較k,k越小優先級越大  
priority_queue<mse>q;   //定義mse的priority_queue
//poj_2724用到



 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值