C++_priority_queue(优先队列)

0x01.说明

  • priority_queue是STL所提供的一个非常有效的容器。
  • 优先队列包含在头文件 <queue> 中。
  • 优先队列由二项队列编写而成的。
  • 查找最大值最小值的效率为O(log N)
  • queue 不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队
  • 优先队列的本质是一个堆实现的。

0x02.定义

priority_queue< type, container, function >

三个参数依次为:

  • type: 数据类型;
  • container:实现优先队列的底层容器,必须是数组形式实现的容器,默认情况下(不加后面参数)是以 vector 为容器;
  • function: 元素之间的优先级顺序;

说明:

  • 在只使用第一个参数时,优先队列默认是一个最大堆,每次输出的堆顶元素是此时堆中的最大元素。

0x03.基本使用

优先队列的成员函数和队列基本相同,不过入队的优先级不同。

//小顶堆
priority_queue <int,vector<int>,greater<int> > q;
//大顶堆
priority_queue <int,vector<int>,less<int> >q;
//需要头文件 #include <functional>

自定义优先级:

//使用函数重载默认的<
bool myCom(int a, int b) {
    return a>b;
}
priority_queue<int, vector<int>, function<bool(int,int)>> temp(myCom);     
//传入比较结构体,自定义优先级。
struct cmp{
    bool operator ()(int a,int b){    //通过传入不同类型来定义不同类型优先级
        return a>b;    //最小值优先
    }
};
auto my_comp = [](const int a, const int b){ return a > b; };
priority_queue<int, vector<int>, decltype(my_comp)> queue(my_comp);

ATFWUS --Writing By 2020–03–23

发布了159 篇原创文章 · 获赞 179 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ATFWUS/article/details/105047735