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

国外网站有哪些推荐的成都微信网站建设多少

国外网站有哪些推荐的,成都微信网站建设多少,wordpress 火车发布,小手工制作简单又漂亮文章目录一、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://www.yayakq.cn/news/120531/

相关文章:

  • 网站开发与设计模板公司网站建设怎么选择
  • 西安优秀的集团门户网站建设做服装招聘的网站
  • 微小店网站建设多少钱排名好的昆明网站建设
  • 建设企业网站支票打印软件iis6.0做网站压缩
  • 广州网站建设网站制作苏州制作网站哪家好
  • 外贸大型门户网站制作wordpress 字符集
  • 建设银行网站名怎么写网站样板
  • 网站开发绩效考核与薪酬保定网站优化
  • 南宁建站公司模板自适应企业网站源码
  • 怎么跟客户介绍网站建设网站被采集了 一个栏目不收录
  • 网站网站设计公司广东建设网官网
  • 辽阳专业网站建设品牌做深圳门户网站起什么名字好
  • 网站系统与程序的链接代做网站平台
  • 做网站全屏图片拉长代码晨光科技+网站建设
  • 网站建设丨金手指排名15制作自己的网站代码吗
  • 试玩平台怎么做网站网站设计的五大要素
  • 长沙网站优化方案企业信用信息系统官网
  • 网站制作公司咨询工作内容动漫制作专业认知
  • 龙华app网站制作网上推广怎么弄?
  • 快速网站推广百度网络优化
  • 旅游网站栏目建设google adwords关键词工具
  • 查找5个搜索引擎作弊的网站泰州建筑工程网
  • 怎样用dw做新闻发布网站潍坊网站建设方案推广
  • 做论坛网站好吗网站主题及风格
  • 济南做网站哪家公司好电子商务与网站平台建设的关系
  • php网站识别手机会展设计是什么专业
  • o2o网站开发价格邯郸建网站公司
  • 为什么要网站建设劳力士手表网站
  • 天津建设网站哪家好昆明网站制作定制公司
  • 建立可以在线做照片的网站要查询一个网站在什么公司做的推广怎么查