zoukankan      html  css  js  c++  java
  • (priority_queque)优先队列容器适配器的使用

    容器适配器就是在基础的顺序容器上定义的一个新的接口。

    这里的顺序容器包括:vector,list,deque.

    priority_queque是建立在vector或deque容器上的。

    优先级队列和普通的队列操作一样。

    包括:出队,入队,读取队首元素,判断队列是否空等。

    只不过不同的是优先级队列并非先进先出,而是根据优先级出队,它会将队列中最大的元素出队。

    好像是对普通队列进行了从大到小排序后,在进行出队操作。

    队列中的元素比较规则默认是按元素的值由大到小排序。

    当然,也可以自己定义比较规则。

    如果优先队列的元素是类类型。可以重载"<"操作符,定义自己的比较规则。

    如下:

    #include <queue>

    #include <iostream>

    using namespace std;

    struct data

    {

           int id;

           bool operator<(const data& d) const

           {

                  return d.id<id;

           }

    };

    int main()

    {

           priority_queue<data> pd;

           data temp;

           temp.id = 2;

           pd.push(temp);

           temp.id = 3;

           pd.push(temp);

           while (!pd.empty())

           {

                  cout<<pd.top().id<<endl;

                  pd.pop();

           }

           return 0;

    }

    通过重新定义小于关系,改变队列出队顺序。

    如果不是类类型。可以通过重载"()"操作符的方式定义优先级。

    如下

    #include <queue>

    #include <iostream>

    using namespace std;

    struct mycmp{

           bool operator()(const int &a, const int &b)

           {

                  return a>b;

           }

    };

    int main()

    {

           priority_queue<int,vector<int>,mycmp> pq;

           pq.push(2);

           pq.push(3);

           while (!pq.empty())

           {

                  cout<<pq.top()<<endl;

                  pq.pop();

           }

           return 0;

    }

    优先级队列,我不常用,今天看到一个程序中使用,因此了解。

  • 相关阅读:
    新的起点,虽半步即天涯
    自定义函数
    冒泡排序 数字去重
    for 循环练习题
    for 循环练习题(2)
    for 循环 乘法口诀表
    js基础标签用法
    网页格式布局 流式布局
    样式表属性
    框架
  • 原文地址:https://www.cnblogs.com/Open_Source/p/1904937.html
Copyright © 2011-2022 走看看