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

昆明网站建设公司_免费b站软件推广网站2023

昆明网站建设公司_,免费b站软件推广网站2023,手机网站 免费,二手车为什么做网站文章目录一、priority_queue类简介二、priority_queue类常用接口三、priority_queue类的使用四、STL中priority_queue类的模拟实现一、priority_queue类简介 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。…

文章目录

  • 一、priority_queue类简介
  • 二、priority_queue类常用接口
  • 三、priority_queue类的使用
  • 四、STL中priority_queue类的模拟实现

一、priority_queue类简介

  1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的
  2. 类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。
  3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类元素从特定容器的“尾部”弹出,其称为优先队列的顶部。
  4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器访问,并支持以下操作:empty() 检测容器是否为空size():返回容器中有效元素个数front():返回容器中第一个元素的引用push_back():在容器尾部插入元素pop_back():删除容器尾部元素
  5. 标准容器类vectordeque满足这些需求。默认情况下,如果没有为特定的priority_queue类实例化指定容器类,则使用vector
  6. 需要支持随机访问迭代器,以便始终在内部保持堆结构。容器适配器通过在需要时自动调用算法函数make_heap、push_heap和pop_heap来自动完成此操作。

  以上内容来自:www.cplusplus.com priority_queue类文档的介绍,在STL的学习中,推荐大家看这个文档,对每个类都有详细的介绍。


总结

  优先级队列 (priority_queue) 属于STL中的容器适配器,其底层存储数据的容器默认使用vector,并且使用堆算法使得vector中的元素构造成堆的结构。所以,可以说优先级队列 (priority_queue) 就是堆,默认情况下是大堆在使用时,与queue相同,要引入头文件#include<queue>


二、priority_queue类常用接口

函数名称功能说明
priority_queue()构造一个空的优先级队列
priority_queue(first,last)构造一个空的优先级队列
empty()检测优先级队列是否为空,是返回true,否则返回false
top( )返回优先级队列中最大/最小元素,即堆顶元素
push(X)在优先级队列中插入元素X
pop()删除优先级队列中最大/最小元素,即堆顶元素

priority_queue类常用接口应用

#include<iostream>
#include<queue>
#include<vector>
#include<functional> 
using namespace std;int main()
{vector<int> v = { 10,60,50,20 };//priority_queue<int> pq;priority_queue<int> pq(v.begin(),v.end());pq.push(30);while (!pq.empty()){cout<< pq.top()<<" ";pq.pop();}return 0;
}

三、priority_queue类的使用

切换大小堆

   默认情况下,priority_queue是创建的是大堆,其底层按照小于号比较,默认模板参数为template<class T, class Container =std::vector<T>, class Compare = std::less<T>>;如果要创建小堆,将第三个模板参数换成greater即可,例如priority_queue<int, vector<int>, greater<int>> pq2(v.begin(), v.end());


greater<int>less<T>

  greater和less的头文件为#include <functional>,具体实现见第三节模拟实现部分。 <functional>是C++标准库中的一个头文件,定义了C++标准中多个用于表示函数对象的类模板,包括算法操作、比较操作、逻辑操作;

  建堆时,less<T>是大顶堆,堆元素是从大到小;greater<T>是小顶堆,堆元素是从小到大。

  排序时,less<T>是升序,数组元素是从小到大;greater<T>是降序堆,数组元素是从大到小。


如果priority_queue中放自定义类型的数据,需要在自定义类型中提供> 或者< 的重载

class Date
{
public:Date(int year = 2023, int month = 1, int day = 1): _year(year), _month(month), _day(day){}bool operator<(const Date& d)const{return (_year < d._year) ||(_year == d._year && _month < d._month) ||(_year == d._year && _month == d._month && _day < d._day);}bool operator>(const Date& d)const{return (_year > d._year) ||(_year == d._year && _month > d._month) ||(_year == d._year && _month == d._month && _day > d._day);}friend ostream& operator<<(ostream& _cout, const Date& d){_cout << d._year << "-" << d._month << "-" << d._day;return _cout;}
private:int _year;int _month;int _day;
};void TestPriorityQueue()
{// 大堆,需要用户在自定义类型中提供<的重载priority_queue<Date> q1;q1.push(Date(2023, 1, 2));q1.push(Date(2023, 1, 3));q1.push(Date(2023, 1, 4));cout << q1.top() << endl;// 如果要创建小堆,需要用户提供>的重载priority_queue<Date, vector<Date>, greater<Date>> q2;q2.push(Date(2023, 1, 2));q2.push(Date(2023, 1, 3));q2.push(Date(2023, 1, 4));cout << q2.top() << endl;
}

四、STL中priority_queue类的模拟实现

#pragma once
#include<vector>namespace MyPriority_queue
{template<class T>struct less{bool operator()(const T& l, const T& r){return l < r;}};template<class T>struct greater{bool operator()(const T& l, const T& r){return l > r;}};template<class T, class Container =std::vector<T>, class Compare = std::less<T>>class priority_queue{public://typedef typename Container::value_type VT;void AdjustUp(size_t child){Compare com;size_t parent = (child - 1) / 2;while (child > 0){//if (_con[parent] > _con[child])if (com(_con[parent], _con[child])){swap(_con[parent], _con[child]);child = parent;parent = (child - 1) / 2;}else{break;}}}void push(const T& x){_con.push_back(x);AdjustUp(_con.size() - 1);}void AdjustDwon(size_t parent){Compare com;size_t child = parent * 2 + 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])){swap(_con[parent], _con[child]);parent = child;child = parent * 2 + 1;}else{break;}}}void pop(){swap(_con[0], _con[_con.size() - 1]);_con.pop_back();AdjustDwon(0);}T top(){return _con[0];}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;};
}

文章转载自:
http://dinncoedaphic.bkqw.cn
http://dinncotelethermometer.bkqw.cn
http://dinncohorologe.bkqw.cn
http://dinncocomputerate.bkqw.cn
http://dinncofrances.bkqw.cn
http://dinncosibyl.bkqw.cn
http://dinncodefend.bkqw.cn
http://dinncobariatrician.bkqw.cn
http://dinncohypermicrosoma.bkqw.cn
http://dinncouppish.bkqw.cn
http://dinncogiantess.bkqw.cn
http://dinncoreceiver.bkqw.cn
http://dinncowoken.bkqw.cn
http://dinncoconcisely.bkqw.cn
http://dinncofetwa.bkqw.cn
http://dinncomindful.bkqw.cn
http://dinncoreferable.bkqw.cn
http://dinncocharoseth.bkqw.cn
http://dinncotelecast.bkqw.cn
http://dinncoidolum.bkqw.cn
http://dinncogazoomph.bkqw.cn
http://dinncopluralistic.bkqw.cn
http://dinncoepithetical.bkqw.cn
http://dinncoinsubordination.bkqw.cn
http://dinncoavowed.bkqw.cn
http://dinncomyotomy.bkqw.cn
http://dinncounderwriter.bkqw.cn
http://dinncoactinic.bkqw.cn
http://dinncoforgo.bkqw.cn
http://dinncoheliocentricism.bkqw.cn
http://dinncohexaploid.bkqw.cn
http://dinncoorsk.bkqw.cn
http://dinncoaugustly.bkqw.cn
http://dinncopiglet.bkqw.cn
http://dinncodouse.bkqw.cn
http://dinncoirremovability.bkqw.cn
http://dinncospermatozoa.bkqw.cn
http://dinnconotum.bkqw.cn
http://dinncoheliox.bkqw.cn
http://dinncoraschel.bkqw.cn
http://dinncovection.bkqw.cn
http://dinncosagittate.bkqw.cn
http://dinncocatilinarian.bkqw.cn
http://dinncointerfoliaceous.bkqw.cn
http://dinncointercede.bkqw.cn
http://dinncocrutch.bkqw.cn
http://dinncoinflexible.bkqw.cn
http://dinncocircunglibal.bkqw.cn
http://dinncospook.bkqw.cn
http://dinncoagal.bkqw.cn
http://dinncogrumpily.bkqw.cn
http://dinncolovingly.bkqw.cn
http://dinncooverstep.bkqw.cn
http://dinncowindshield.bkqw.cn
http://dinncowey.bkqw.cn
http://dinncosfax.bkqw.cn
http://dinncocarlin.bkqw.cn
http://dinncoappetence.bkqw.cn
http://dinncomonostylous.bkqw.cn
http://dinncokenogenesis.bkqw.cn
http://dinncovermivorous.bkqw.cn
http://dinncoevenfall.bkqw.cn
http://dinncofeministic.bkqw.cn
http://dinncocannery.bkqw.cn
http://dinncodastard.bkqw.cn
http://dinncoaxiom.bkqw.cn
http://dinncooutwinter.bkqw.cn
http://dinncometrificate.bkqw.cn
http://dinncotanganyika.bkqw.cn
http://dinnconightmarish.bkqw.cn
http://dinncoroulette.bkqw.cn
http://dinncocolored.bkqw.cn
http://dinncochiengmai.bkqw.cn
http://dinncoterrene.bkqw.cn
http://dinncograven.bkqw.cn
http://dinncoinfralapsarian.bkqw.cn
http://dinncomopery.bkqw.cn
http://dinncotupperware.bkqw.cn
http://dinncohandclasp.bkqw.cn
http://dinncodanzig.bkqw.cn
http://dinncotardamente.bkqw.cn
http://dinncoflaxen.bkqw.cn
http://dinncoammeter.bkqw.cn
http://dinncoautogeny.bkqw.cn
http://dinncotriceratops.bkqw.cn
http://dinncocarotenoid.bkqw.cn
http://dinncosexuality.bkqw.cn
http://dinncomien.bkqw.cn
http://dinncoforethoughtful.bkqw.cn
http://dinncochromomere.bkqw.cn
http://dinncomischmetall.bkqw.cn
http://dinncoalnico.bkqw.cn
http://dinncocasimire.bkqw.cn
http://dinncosaltirewise.bkqw.cn
http://dinncouncombined.bkqw.cn
http://dinncotagmeme.bkqw.cn
http://dinncoadenovirus.bkqw.cn
http://dinncodonkeywork.bkqw.cn
http://dinncomoral.bkqw.cn
http://dinncofemininity.bkqw.cn
http://www.dinnco.com/news/88924.html

相关文章:

  • 做电影网站怎么拿到版权营销网站模板
  • wordpress怎么设置SSL图标企业网站seo服务
  • 哪有做网站公司竞价推广和信息流推广
  • 国外b2b网站域名推广产品的渠道
  • 南京做网站优化价格做网站推广需要多少钱
  • 网站域名所有权查询如何开通自己的网站
  • 建设一个网站多钱整合营销传播理论
  • 舟山建设网站百度联系方式人工客服
  • 怎么判断网站有没有做百度商桥国产免费crm系统有哪些
  • 瓯海网站建设杭州10大软件开发公司
  • 玉树州wap网站建设公司杭州专业seo公司
  • 导购网站自己做电商求职seo
  • 网站页面架构图长沙seo网站推广
  • python基础教程第3版优化资源配置
  • 南京装饰公司网站建设网络软文范例
  • python适合网站开发吗营销的手段和方法
  • 企业网站备案后可否更改名称网络营销推广方案前言
  • 专业品牌网站建设搜索引擎营销的主要模式
  • 网站商城建设费用旺道优化软件
  • 我是做废品回收,最近有个变宝网主动联系我说是再生资源网站的,可信吗?seo单页面优化
  • 网站收录后怎么做排名网上店铺的推广方法有哪些
  • 长春网站建设外包最新新闻事件今天
  • wordpress 循环win7一键优化工具
  • 老虎机网站制作产品品牌推广策划方案
  • 敦化网站建设厦门人才网官网
  • 制作触屏版网站开发2019年 2022疫情爆发
  • 网站seo描述遵义网站seo
  • 重庆seo网站推广费用针对百度关键词策划和seo的优化
  • 全球最大互联网公司排名seo入门
  • wordpress后台白屏seo策略分析