priority_queue优先队列容器

priority_queue优先队列容器

  • priority_queue优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。

  • 但它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按先进先出的原则进行,而是将当前队列中最大的元素出队这点类似于给队列里的元素进行了由大到小的顺序排序。

  • 元素的比较规则默认为按元素的值由大到小排序

  • 当然,可以重载“<”操作符来重新定义比较规则。

声明头文件包含语句“#include <queue>”

使用

基本使用

优先队列包含入队push()(插入元素)出队pop()(删除元素)读取队首元素top()、**判断队列是否为空empty()读取队列元素数量size()**等方法。

#include<queue>
#include<iostream>
using namespace std;

int main(){
    //定义优先队列
    priority_queue<int> pq;
    
    //入队,插入元素
    pq.push(1);
    pq.push(2);
    pq.push(3);
    
    //返回队列中元素的数目
    cout<<pq.size()<<endl;
    
    //所有元素出队,删除所有元素
    while(!pq.empty()){
        //读取当前队首元素
        cout<<pq.top()<<endl;
        //出队,删除队首元素
        pq.pop();
    }
    cout<<endl;
    
    return 0;  
}

重载“<”操作符来定义优先级

如果优先队列的元素类型是结构体,可以通过在结构体中重载“<”操作符的方法来修改优先队列的优先性。

//定义结构体
struct info{
    string name;
    float score;
    //重载< 操作符,指定优先级规则(排序规则)
    bool operator < (const info & a)const{
		//按从小到大排序(原本是< ,现在的功能是>)
       return score > a.score;
    }
};

// priority_queue<info> pq;

重载“()”操作符来定义优先级

如果优先队列的元素不是结构体类型,则可以通过重载“()”操作符的方式来定义优先级。

当然,元素是结构体类型,也可以通过重载“()”操作符的方式来定义优先级,而不是一定要在结构体内重载“<”操作符才行。

//重载()
struct myComp{
    bool operator () (const int &a,const int& b){
		//由小到大
        return a>b;
    }
};


//定义优先队列,显式说明内部结构是vector
//priority_queue<int,vector<int>,myComp> pq;

猜你喜欢

转载自blog.csdn.net/first_bug/article/details/119617497
今日推荐