优先队列

优先队列相关

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

概念:

优先队列(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++还没学,就先这样吧,错了再改...   优先队列的应用: 可以保证每次取的优先级最高的元素,速度快。
上一篇:boost heap


下一篇:[转载]Huffman编码压缩算法