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

婚介 东莞网站建设wordpress对接steam

婚介 东莞网站建设,wordpress对接steam,免费制作的企业网站,wordpress超简洁自适应html5博客主题:read使用 priority_queue 优先级队列与 stack 和 queue 一样#xff0c;也是一个容器适配器#xff0c;其底层通过 vector 来实现的。与 stack 和 queue 不同的是#xff0c;它的第一个元素总是它所包含的元素中最大或最小的一个。 也就是说#xff0c;优先级队列就是数据结…使用 priority_queue 优先级队列与 stack 和 queue 一样也是一个容器适配器其底层通过 vector 来实现的。与 stack 和 queue 不同的是它的第一个元素总是它所包含的元素中最大或最小的一个。 也就是说优先级队列就是数据结构中所说的堆。其通过堆的向上调整算法、向下调整算法等将其变为一个堆保证其第一个元素一定为其所包含元素中最大或最小的一个。 priority_queueint q; q.push(9); q.push(2); q.push(7); q.push(1); q.push(5);while (!q.empty()) {cout q.top() ;q.pop(); } cout endl; 模拟实现 基础实现 模拟实现优先级队列就是模拟实现堆要实现的核心接口为 push() 和 pop() 。(堆的实现详解) 其为适配器底层利用 vector 来实现。 默认实现为大堆。 #includevector//大堆 namespace Friend {templateclass T, class Container vectorTclass priority_queue{public:bool empty() const{return con.empty();}size_t size() const{return con.size();}const T top() const{// 返回数组的第一个元素return con.front();}void AdjustUp(int child){int parent (child - 1) / 2;while (parent 0){if (con[parent] con[child]){std::swap(con[parent], con[child]);child parent;parent (child - 1) / 2;}else{break;}}}void AdjustDown(int parent){int child 2 * parent 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 2 * parent 1;}else{break;}}}void push(const T x){// 在尾部插入一个新数据con.push_back(x);// 将其重新调整为堆AdjustUp(con.size() - 1);}// 删除堆顶的数据void pop(){// 交换堆顶和尾部的数据std::swap(con[0], con[con.size() - 1]);// 删除尾部数据con.pop_back();// 将其重新调整为堆AdjustDown(0);}private:Container con;}; } 仿函数 按照之前的方法如果要把大堆变为小堆就要把 AdjustUp( )、AdjustDown( ) 中所有的 ‘ 变为 ’  十分麻烦。因此C 中使用仿函数来解决这个问题。 仿函数实际上为类并非真正的函数。 其通过重载了 ( ) 来控制大堆、小堆的变化。 templateclass T class Less { public:// x -- i-1 ******* y -- ibool operator()(const T x, const T y){return x y;} };templateclass T class Greater { public:// x -- i-1 ******* y -- ibool operator()(const T x, const T y){return x y;} }; 由于其调用时像函数调用因此得名仿函数。 Lessint less;less(10, 20); less.operator()(1, 9);Greaterint greater;greater(10, 20); greater.operator()(1, 9); 改进 因此我们对代码进行改进。 namespace Friend {templateclass T, class Container vectorT, class Compare LessTclass priority_queue{public:bool empty() const{return con.empty();}size_t size() const{return con.size();}const T top() const{// 返回数组的第一个元素return con.front();}void AdjustUp(int child){int parent (child - 1) / 2;while (parent 0){// if (con[parent] con[child])if (com(con[parent], con[child])){std::swap(con[parent], con[child]);child parent;parent (child - 1) / 2;}else{break;}}}void AdjustDown(int parent){int child 2 * parent 1;while (child con.size()){// if (child 1 con.size() con[child] con[child 1])if (child 1 con.size() com(con[child], con[child 1])){child;}// if (con[parent] con[child])if (com(con[parent], con[child])){std::swap(con[parent], con[child]);parent child;child 2 * parent 1;}else{break;}}}void push(const T x){// 在尾部插入一个新数据con.push_back(x);// 将其重新调整为堆AdjustUp(con.size() - 1);}// 删除堆顶的数据void pop(){// 交换堆顶和尾部的数据std::swap(con[0], con[con.size() - 1]);// 删除尾部数据con.pop_back();// 将其重新调整为堆AdjustDown(0);}private:Container con;Compare com;}; } 大堆时 Friend::priority_queueint q; 如果要变为小堆则 Friend::priority_queueint, vectorint, Greaterint q; 只需通过仿函数的变换就能达到目的。
http://www.hkea.cn/news/14524816/

相关文章:

  • 成都科技网站建设电话多少钱公司网站建设电话
  • 推荐邯郸网站建设ui设计在线培训机构
  • 网站怎么做才吸引人拼团网站开发
  • 一个ip 做2个网站吗广州办营业执照
  • 无二制造 网站升级建设中最近军事新闻热点
  • 设计软件网站制作网站建设天津最新通告今天最新
  • 中国档案网站建设的特点网站制作app
  • 做网站用微软雅黑侵权吗wordpress怎么修改头像
  • 长安区建设局网站线上推广方式有哪些渠道
  • 建设银行网站电脑版wordpress代码风格主题
  • 如何建立自己的摄影网站美食网站首页设计
  • 做网站被骗五千多做网站还需要兼容ie8吗
  • 网站设计的研究方案军事新闻视频
  • 常见网站建设工具有哪些怎么做网站关键词推广
  • 北京最大的网站建设有限公司自己做h5怎么做
  • 做一普通网站需要多少钱昆山网站设计
  • 高端品牌网站建设内容富平网站建设
  • 公司对网站排名如何做绩效个人网站设计论文题目
  • 网页网站制作维护用织梦做的网站怎么上传虚拟
  • 网站地图定位用什么技术做云南省住房建设厅网站
  • 做网站建设的合同范本服装定制行业的未来和趋势
  • 制作微信公众号的网站开发wordpress小工具页脚
  • 上线了建的网站免费吗wordpress必备的插件
  • 怎样做才能让自己的网站泰安赶集网
  • 外国人做的关于中国的视频网站吗wordpress title
  • 软件培训招生深圳网站seo地址
  • 口碑好网站建设费用汕头网站制作服务商
  • 网站推广120种方法厦门市建设局网站首页
  • 前端网站做完 后端用什么做wordpress 免费弹窗插件
  • 南宁会员网站制作深圳网站搭建找谁