当前位置: 首页 > news >正文

泸州市建设厅官方网站互联网推广是做什么的

泸州市建设厅官方网站,互联网推广是做什么的,织梦模板自适应,推广软件的种类文章目录 前言优先级队列的结构优先级队列的模拟实现仿函数 最终代码 前言 什么是优先级队列,从该名中可以知道他一定有队列的一定属性,即先入先出(LILO),而这里的优先级则可以判断出它的另一个特点就是可以按照一定的条件将符合该条件的先进…

文章目录

  • 前言
    • 优先级队列的结构
    • 优先级队列的模拟实现
      • 仿函数
    • 最终代码

前言

什么是优先级队列,从该名中可以知道他一定有队列的一定属性,即先入先出(LILO),而这里的优先级则可以判断出它的另一个特点就是可以按照一定的条件将符合该条件的先进行出队,这就是优先级队列;
而在数据结构中有一个支持该操作的结构 - 堆( heap );
而在STL中,这个优先级队列( priority_queue )也正是堆;


优先级队列的结构

既然优先级队列的结构是堆,那想必结构上也不难;
堆的结构是以顺序表为基础,从而实现完全二叉树的结构;
在这里插入图片描述

从该容器的接函数接口中也可以知道实际上它就是个堆;在这里插入图片描述


优先级队列的模拟实现

优先级队列priority_queue为一个类模板容器;
且同STL中的栈stack与队列queue一样都为适配器模式的容器,即以某个容器为基础;

template <class T, class Container = vector<T>,class Compare = less<typename Container::value_type> > class priority_queue;
其模板参数有三个分别为:

  • class T
    容器所存储的数据类型 T ;

  • class Container = vector<T>
    容器适配器且定缺省参数默认为 vector< T >;

  • class Compare = less<typename Container::value_type>
    一个用来比较大小的仿函数,给定缺省参数默认为 less ,该仿函数在标准库std中;

根据文档中的信息来看,优先级队列主要的几个接口也正是数据结构中堆应有的结构;

#pragma once #include<iostream>#include<vector>#include<assert.h>using namespace std;namespace my_priority{//命名空间template<class T,class Container = std::vector<T>>//暂未设置仿函数class priority_queue{//总体框架public:void push(const T& val){//增_con.push_back(val);adjust_up(_con.size()-1);}void pop(){std::swap( _con[_con.size()-1],_con[0]);//删_con.pop_back();adjust_down(0);}bool empty(){//判空return _con.empty();}size_t size(){//返回大小return _con.size();}const T& top()const{//返回堆顶assert(!_con.empty());return _con[0];}void swap(priority_queue& con){//交换if(_con!=con._con)_con.swap(con._con);}private://必要函数 - 向上调整&&向下调整void adjust_up(size_t child){size_t parent = child;while(parent>0){parent = (child-1)/2;if(_con[parent]<_con[child]){std::swap(_con[parent],_con[child]);}child = parent;}}void adjust_down(size_t parent){Compare comfunc;size_t child = parent*2+1;while(child<_con.size()){if(child+1<_con.size()&&_con[child]<_con[child+1]){++child;}if(_con[parent]<_con[child]){std::swap(_con[parent],_con[child]);}parent = child;child = parent*2+1;}}Container _con; //容器适配器所实例化的对象,当前代码为vector<int>};

但是在库中,模板参数共有三个,具体的第三个仿函数到底是什么?


仿函数

仿函数,也被称为函数对象;
即一个可以使用函数功能的类,本质上就是在类中重载了operator();
举个简单的例子,当我们想要写一个能将两个数进行相加的仿函数即可以这么写;

struct Add{int operator()(int a,int b){return a+b;} 
}
int main()
{Add addfunc;int ret = addfunc(1,2);//仿函数的调用;ret = Add() (1,2);//利用匿名对象;return 0;
}

同理,也可以根据该方法写一个比较两个对象大小的仿函数;
为了能接受多种类型的数据进行比较也可以将其设置为类模板;

template<class T>
struct less{bool operator()(const T& a,const T& b){return a<b;} 

这也就是在实现当中缺失的模板参数,仿函数;
由于优先级队列priority_queue的大小根堆属性是由其中的向上调整算法adjust_up与向下调整算法adjust_down来决定的(建堆以及堆的调整);所以只要将对应的比较大小><换成仿函数即可;


最终代码

#pragma once #include<iostream>#include<vector>#include<assert.h>using namespace std;namespace my_priority{template<class T>struct less{bool operator()(const T& v1,const T& v2){return v1<v2;}};template<class T>struct greater{bool operator()(const T& v1,const T& v2){return v1>v2;}};template<class T,class Container = std::vector<T> ,class Compare = less<T>>class priority_queue{public:void push(const T& val){_con.push_back(val);adjust_up(_con.size()-1);}void pop(){std::swap( _con[_con.size()-1],_con[0]);_con.pop_back();adjust_down(0);}bool empty(){return _con.empty();}size_t size(){return _con.size();}const T& top()const{assert(!_con.empty());return _con[0];}void swap(priority_queue& con){if(_con!=con._con)_con.swap(con._con);}private:void adjust_up(size_t child){Compare comfunc;size_t parent = child;while(parent>0){parent = (child-1)/2;if(comfunc(_con[parent],_con[child])){std::swap(_con[parent],_con[child]);}child = parent;}}void adjust_down(size_t parent){Compare comfunc;size_t child = parent*2+1;while(child<_con.size()){if(child+1<_con.size()&&comfunc(_con[child],_con[child+1])){++child;}if(comfunc(_con[parent],_con[child])){std::swap(_con[parent],_con[child]);}parent = child;child = parent*2+1;}}Container _con;};
http://www.yayakq.cn/news/620688/

相关文章:

  • 最近几天新闻大事网站网络优化服务器
  • 安徽方圆建设有限公司网站网页制作模板简易
  • 公司网站建设支出计入住建网证书查询
  • 平阳门户网站建设360建筑网如何修改名字
  • 梁山县网站建设如何制作网页设计首页
  • 进入qq空间登录中山网站优化排名
  • 公司建设网站的分录工程公司安全考试
  • 延庆免费网站建设seo专业优化公司
  • 贵阳网络科技有限公司seo教程 百度网盘
  • 辽宁智能网站建设价位成都网站
  • 青岛网站建设邓巴迪深圳设计展2022
  • 有关游戏的网站建设规划书seo是哪个英文的缩写
  • 做网站 负责 域名备案需要什么?
  • 纯静态网站做优化有什么影响公司年会活动方案策划
  • 深圳网站seo 乐云践新最新办公室装修风格效果图
  • dede 两个网站图片路径杭州seo网站
  • 成都专业建网站做彩票网站怎么样
  • 滕州营销型网站室内设计培训班排行榜
  • 商城网站制作 价格网站显示内容不显示
  • 做家教用什么网站精品网站建设费用 磐石网络
  • 网站域名费一年交多少wordpress读取数据库代码
  • 深圳网站搭建多少钱信息流广告投放工作内容
  • wordpress调整字体seo网站推广有哪些
  • 淄博网站建设制作大学生求职创业补贴
  • mvc网站建设的实验报告花店网站建设课程设计论文
  • 网站空间知识网站后台打开慢
  • 黄页网络的推广网站有哪些软件新手做网站应该注意什么
  • 建网站都用什么字体网站ie兼容性
  • 网站版权符号云南昆明百度总代理
  • 网站制作公司哪家专业为什么wordpress打不开