【优先队列】

队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一个被取出的元素则取自队列的首部。priority_queue特别之处在于,允许用户为队列中存储的元素设置优先级。这种队列不是直接将新元素放置在队列尾部,而是放在比它优先级低的元素前面。标准库默认使用<操作符来确定对象之间的优先级关系,所以如果要使用自定义对象,需要重载 < 操作符。

优先队列有两种,一种是最大优先队列;一种是最小优先队列;每次取自队列的第一个元素分别是优先级最大和优先级最小的元素。 

比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,优先队列就是大顶堆,队头元素最大。
如果要用到小顶堆,则一般要把模板的三个参数都带进去。STL里面定义了一个仿函数 greater<>,对于基本类型可以用这个仿函数声明小顶堆

   优先队列作为一个容器适配器,它使用其它容器作为底层容器,并提供一系列访问元素的函数。优先队列中的元素从底层容器的“尾部(back)”弹出,即是从队列的顶部(top)弹出。底层容器需要满足的条件是可以通过迭代器随机访问其中的元素并且支持以下的操作:

  • front()
  • push_back()
  • pop_back()

创建一个优先队列的格式:

priority_queue<T, Container, Compare>

    可以看出,创建一个优先队列默认需要三个参数(实际应用上有些参数可以省去)。参数解释:

   T:队列中元素的数据类型

   Container: 用于储存和访问队列元素的底层容器的类型。

   Compare: 比较关系,默认是数值上的小于关系,比如1<2,6<7,此时队列中元素由队头到队由大到小排列,采用默认compare时此参数可以省去。当需要采用其它标准进行比较时需要额外定义这一比较方式(下例示)。当满足比较关系”<”时,返回true,否则返回false。


你可能感兴趣的:(【优先队列】)