优先队列

优先队列相关

写这个是因为补题要用到优先队列。

概念:

优先队列(priority queue)
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。
 
这个东西呢STL里面是有的,可以拿来直接用,很方便,至于手写的话,先等我学了堆的操作再说吧。。
 
定义一个优先队列:
priority_queue <int> Q; //默认从大到小排序
priority_queue <int,vector<int>,less<int> > Q; //STL自带的可以方便的从大到小排序
priority_queue <int,vector<int>,greater<int> > Q; //STL自带的可以方便的从小到大排序
//int 换成 node 等结构体也可以,总之就是类型
队首元素使用top()函数取出,push()入队一个元素,会根据优先级自动排列,所有操作均为logn时间完成
 
当需要根据题目要求,对与结构体,优先级定义更为复杂时,有两种处理方法。
 
1.重载运算符。
  一般重载运算符时,都是 < 重载。

  struct E
  {
    int v,w;
    bool operator< (const E& b) const
    {
      return w > b.w;
    }
  };

  

  struct E
  {
    int v,w;
    friend bool operator< (E x,E y)
    {
      return x.w>y.w;
    }
  };

2.类比于sort函数,手写一个cmp函数。
struct cmp
{
  bool operator () (const node &x,const node &y) const
  {
    return x.w>y.w;
  }
}
然后priority_queue <E,vector<E>,cmp > Q;
 
c++还没学,就先这样吧,错了再改...
 
优先队列的应用:
可以保证每次取的优先级最高的元素,速度快。
原文地址:https://www.cnblogs.com/ztdf123/p/10883176.html