• 优先队列


    优先队列相关

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

    概念:

    优先队列(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++还没学,就先这样吧,错了再改...
     
    优先队列的应用:
    可以保证每次取的优先级最高的元素,速度快。
  • 相关阅读:
    default关键字用法
    【转载】SpringMvc和servlet简单对比介绍
    build模式入门,build模式理解(转载)
    tomcat logs 目录下各日志文件的含义
    @Component, @Repository, @Service,@Controller的区别
    在项目开发时为什么要先写接口,再写实现类?
    java 中static关键字注意事项
    this关键字使用注意事项
    两个对象之前如何建立联系
    html页面监听事件
  • 原文地址:https://www.cnblogs.com/ztdf123/p/10883176.html
Copyright © 2020-2023  润新知