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

遵义市政府网站建设概况安装百度

遵义市政府网站建设概况,安装百度,云上铺会员管理系统官网,wordpress themememe wpex使用 priority_queue 优先级队列与 stack 和 queue 一样,也是一个容器适配器,其底层通过 vector 来实现的。与 stack 和 queue 不同的是,它的第一个元素总是它所包含的元素中最大或最小的一个。 也就是说,优先级队列就是数据结…

使用

priority_queue

优先级队列与 stack 和 queue 一样,也是一个容器适配器,其底层通过 vector 来实现的。与 stack 和 queue 不同的是,它的第一个元素总是它所包含的元素中最大或最小的一个。

也就是说,优先级队列就是数据结构中所说的堆。其通过堆的向上调整算法、向下调整算法等,将其变为一个堆,保证其第一个元素一定为其所包含元素中最大或最小的一个。

priority_queue<int> 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 来实现。

默认实现为大堆

#include<vector>//大堆
namespace Friend
{template<class T, class Container = vector<T>>class 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++ 中使用仿函数来解决这个问题。

仿函数实际上为类,并非真正的函数。

其通过重载了 ( ) ,来控制大堆、小堆的变化。

template<class T>
class Less
{
public:// x -- i-1  *******  y -- ibool operator()(const T& x, const T& y){return x < y;}
};template<class T>
class Greater
{
public:// x -- i-1  *******  y -- ibool operator()(const T& x, const T& y){return x > y;}
};

由于其调用时像函数调用,因此得名仿函数。

Less<int> less;less(10, 20);
less.operator()(1, 9);Greater<int> greater;greater(10, 20);
greater.operator()(1, 9);

改进

因此,我们对代码进行改进。

namespace Friend
{template<class T, class Container = vector<T>, class Compare = Less<T>>class 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_queue<int> q;

如果要变为小堆,则:

Friend::priority_queue<int, vector<int>, Greater<int>> q;

只需通过仿函数的变换就能达到目的。

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

相关文章:

  • 深圳海外医疗网站建设优化大师手机版下载安装app
  • 网站制作外包是怎么做的谷歌商店paypal三件套
  • 做网站和APP需要多少钱千锋教育出来好找工作吗
  • 淘宝网站建设基本流程图广西壮族自治区在线seo关键词排名优化
  • 医疗网站建设平台价格亚马逊跨境电商个人开店
  • 做暧暖的免费网站acca少女网课视频
  • 做企业官网要多少资金和时间百度seo学院
  • 哈尔滨做公司网站的公司有哪些网络平台的推广方法
  • 网站优化建设河南东莞网站建设方案报价
  • 银川网站建设有哪些保定百度推广优化排名
  • 建设摩托车官网旗舰店网站优化课程培训
  • 甘肃省兰州市建设厅网站正规代运营公司
  • 网站开发服务费凭证做什么科目百度2023免费
  • 企业网站 seo怎么做自己做的网址如何推广
  • 网站百度快照谷歌seo网站推广
  • 新泰网站建设自己代理一款手游需要多少钱
  • 重庆企业网站制作外包沈阳市网站
  • 用jsp实现网站开发实例天津百度推广排名
  • 做钓鱼网站教程视频惠州自动seo
  • 校园视频网站建设cpv广告联盟
  • 网站开发岗位内容和要求长沙网站制作推广
  • 做第三方库网站南宁seo全网营销
  • 做货代网站企业网页制作
  • 哪个网站做海南二手房搜外友链平台
  • 双wordpress自动同步文章seo外包费用
  • 快速仿站网站建设郑州专业网站建设公司
  • 个人空间网站建设网站推广的方法有哪些?
  • 做网站商城互联网公司上海网络关键词优化
  • b2c网站 架构头条新闻 最新消息条
  • 东莞网站设计价格线上宣传渠道