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

做网站买服务器怎么样免费做网站怎么做网站吗

做网站买服务器怎么样,免费做网站怎么做网站吗,网页大型游戏排行榜,湛江专业网站建设公司前言:这篇文章我们继续来分享一个c的容器——优先级队列。 一.理解优先级 何为优先级一说?实际上就是有顺序的意思。 优先级队列,即有顺序的队列,是一个无需我们自己进行排序操作,在数据传入时就会由容器自己排好序的…

前言:这篇文章我们继续来分享一个c++的容器——优先级队列。


一.理解优先级

何为优先级一说?实际上就是有顺序的意思。

优先级队列,即有顺序的队列,是一个无需我们自己进行排序操作,在数据传入时就会由容器自己排好序的队列

先来看实例:

使用该队列,同样需要包含头文件#include<queue>

在默认情况下,优先级队列是按照从大到小排序的,而在数据结构中,也有一个能够自主排序,没错,就是从大到小的顺序,也就是大堆

那么如果想要实现小堆,又该怎么办呢?只需要增加一下模版参数

至于为什么这样写就是小堆,我们再接下来的模拟实现中进行解答。


二.基本框架

堆可以通过父节点或字节点的下标来互相找到对方的下标,所以一般情况都以数组为模板。 

	template <class T,class Container = vector<T>>class priority_queue{public://向上调整void adjust_up(size_t child){int parent = (child - 1) / 2;while (child > 0){if (_con[child] > _con[parent]){swap(_con[child], _con[parent]);child = parent;int parent = (child - 1) / 2;}else{break;}}}//向下调整void adjust_down(size_t parent){size_t child = parent * 2 + 1;while (child < _con.size()){if (child + 1 < _con.size() && _con[child + 1] > _con[child]){++child;}if (_con[child] > _con[parent]){swap(_con[child], _con[parent]);parent = child;child = parent * 2 + 1;}else{break;}}}//插入void push(const T& x){_con.push_back(x);adjust_up(_con.size() - 1);}//删除void pop(){swap(_con[_con.size() - 1], _con[0]);_con.pop_back();adjust_down(0);}//队头元素T& top(){return _con[0];}//数据个数size_t size(){return _con.size();}//判空bool empty(){return _con.empty();}private:Container _con;};

这里我们直接给出优先级队列的基本常规操作,本质就是堆的各种操作,不再一一分享。

而我们要重点分享的,就是如何切换升降序


 三.仿函数

从名字就能看出,这是一个可以冒充函数的家伙,先来看例子:

template <class T>
class less
{
public:bool operator()(const T& x, const T& y){return x < y;}
};

这段代码不难理解,在一个类中声明了一个运算符重载函数,这个函数能够进行大小比较。 

再来看这段代码,能够发现我们能够直接通过一个对象来进行两个数据之间的比较。 

这就是所谓的仿函数。 

上述仿函数是进行“小于”比较,同样我们也可以在创造一个仿函数来进行“大于”比较。

如此一来,我们便可以通过类模板将这两个仿函数用于排序比较


四.实现可选优先级

直接看代码:

	//小于比较template <class T>class less{public:bool operator()(const T& x, const T& y){return x < y;}};//大于比较template <class T>class greater{public:bool operator()(const T& x, const T& y){return x > y;}};template <class T,class Container = vector<T>,class compare = less<T>>//注意class priority_queue{//大堆public://向上调整void adjust_up(size_t child){compare com;//注意int parent = (child - 1) / 2;while (child > 0){if (com(_con[parent], _con[child]))//注意{swap(_con[child], _con[parent]);child = parent;int parent = (child - 1) / 2;}else{break;}}}//向下调整void adjust_down(size_t parent){compare com;//注意size_t child = parent * 2 + 1;while (child < _con.size()){if (child + 1 < _con.size() && com(_con[child], _con[child + 1]))//注意{++child;}if (com(_con[parent], _con[child]))//注意{swap(_con[child], _con[parent]);parent = child;child = parent * 2 + 1;}else{break;}}}

其中less为小于比较的类,而greater为大于比较的类

而后我们通过使用类模板参数compare将两者整合在一起因为库里的优先级队列默认即为大堆,所以我们使用缺省参数默认为less

前边已经提到,使用仿函数,就是使用对应类的对象,所以我们需要创建compare类的对象com,并传入比较内容进行比较

这里要注意两个比较数据的先后位置,要按照到底是谁大于谁而传入正确的先后顺序。

 

随后就可以按照排序要求对类型进行更改,按照我们的代码方式,less为降序,greater为升序。 


总结

优先级队列的分享到这里就结束啦。

目前为止不难看出C++的这些容器的底层数据结构都是我们所学习过的,所以对于掌握容器的使用并不困难。

喜欢本篇文章记得一键三连,我们下期再见~

http://www.ds6.com.cn/news/55115.html

相关文章:

  • 网站开发后台前端数据库seo搜索引擎优化排名哪家更专业
  • 事业单位网站建设的账务处理网站权重
  • 广州十大传媒公司百度禁止seo推广
  • 做网站需要多少钱啊怎么做互联网营销推广
  • 中国拟在建项目网青岛网站seo公司
  • 青岛做网站的百度快照怎么删除
  • 网站建设方案主要有百度推广中心
  • 企业建设网站企业网络推广和运营的区别
  • 保定公司网站建设线上销售水果营销方案
  • 公司网站建设调研网站关键词
  • app下载我的订单seo优化大公司排名
  • 哪些网站做任务赚钱上海有哪些优化网站推广公司
  • 合肥高端网站建设公司哪家好引流推广网站平台
  • 有什么网站可以做婚庆视频it培训机构培训费用
  • 烟台做外贸网站seo教程技术优化搜索引擎
  • 手机网站 pc网站模板seo还有用吗
  • 河南省通信管理局网站备案电话适合40岁女人的培训班
  • 浙江杭州下沙做网站自媒体135网站免费下载安装
  • 长沙做网站最好的公司有哪些怎样精准搜索关键词
  • 宁波网站搭建sem运营
  • 自己怎么做网站视频赚钱吗seo优化分析
  • 萧山城区建设有限公司网站计算机培训机构排名
  • 在一家传媒公司做网站编辑 如何视频剪辑培训班学费一般多少
  • 没有收款接口网站怎么做收款前端培训
  • 招工网站怎么做线上宣传的方式
  • 网络营销中关于网站设计7cs百度seo搜索引擎优化方案
  • 时尚flash网站官网站内推广内容
  • 上海手机网站建设电话咨询重庆森林电影简介
  • 做外贸用什么搜索网站seo关键词
  • asp动态网站开发基础教程答案西安seo外包平台