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

晋城市住建设局网站wordpress去除评论表单

晋城市住建设局网站,wordpress去除评论表单,响应式网页模版,莱芜论坛莱芜都市网priority_queue priority_queue 简单介绍priority_queue 使用内置类型测试自定义类型测试 priority_queue 模拟实现仿函数#xff08;less、greater#xff09; priority_queue 简单介绍 优先级队列是一种容器适配器。类似于堆#xff0c;可以随时插入元素#xff0c;只能… priority_queue priority_queue 简单介绍priority_queue 使用内置类型测试自定义类型测试 priority_queue 模拟实现仿函数less、greater priority_queue 简单介绍 优先级队列是一种容器适配器。类似于堆可以随时插入元素只能检索优先级队列中位于顶部的元素。 priority_queue是作为容器适配器实现的容器适配器是对特定容器类封装作为其底层的容器。vector、deque符合priority_queue需求如果没有指定特定的底层容器默认使用vector。需要支持随机访问迭代器以便内部保持堆结构。 priority_queue 使用 在默认底层容器vector中使用堆算法将vector中的元素构成堆的结构所以priority_queue就是堆。 使用场景在需要用到堆的位置。priority_queue默认是大堆。 函数接口说明priority_queue()构造空的优先级队列priority_queue(first, last)迭代器范围构造优先级队列empty()判断优先级队列是否为空top()返回堆顶元素的const引用push(val)将val插入优先级队列中pop()删除堆顶元素 内置类型测试 void test_priority_queue() {//默认是大堆 -- less less在sort中对应的是升序但是在priority_queue中建的大堆//priority_queueint pq;//仿函数greater控制建小堆priority_queueint, vectorint, greaterint pq;pq.push(5);pq.push(10);pq.push(3);pq.push(1);while (!pq.empty()){cout pq.top() ;pq.pop();}cout endl; }test2: void test_priority_queue() {vectorint v{ 3,2,7,6,0,4,1,9,8,5 };//默认大堆priority_queueint pq;for (auto e : v){pq.push(e);}cout pq.top() endl;//创建小堆priority_queueint, vectorint, greaterint pq1(v.begin(), v.end());cout pq1.top() endl; }自定义类型测试 如果是自定义类型的数据用户需要提供大于或者小于的重载 class Date {friend ostream operator(ostream _cout, const Date d);public:Date(int year 1900, 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);}private:int _year;int _month;int _day; };ostream operator(ostream _cout, const Date d) {_cout d._year - d._month - d._day;return _cout; }void test_priority_queue() {// 大堆需要用户在自定义类型中提供的重载priority_queueDate pq1;pq1.push(Date(2023, 8, 6));pq1.push(Date(2023, 7, 6));pq1.push(Date(2023, 6, 6));cout pq1.top() endl;// 如果要创建小堆需要用户提供的重载priority_queueDate, vectorDate, greaterDate pq2;pq2.push(Date(2023, 8, 6));pq2.push(Date(2023, 7, 6));pq2.push(Date(2023, 6, 6));cout pq2.top() endl; }注意 如果自定义类型没有重载用于比较的符号 则程序运行错误。 priority_queue 模拟实现 priority_queue类模板实现借用了一个容器vector和两个仿函数less、greater。如果想进一步观察priority_queue的逻辑结构请点击该链接堆的实现 #include vector #include assert.h// priority_queue---堆 namespace kpl {templateclass Tstruct less{bool operator()(const T left, const T right){return left right;}};templateclass Tstruct greater{bool operator()(const T left, const T right){return left right;}};templateclass T, class Container std::vectorT, class Compare lessTclass priority_queue{public:// 创造空的优先级队列priority_queue(){}/*templateclass InputIteratorpriority_queue(InputIterator first, InputIterator last){ //这里可以不使用初始化列表//数据存入while (first ! last){_con.push_back(*first);first;}//向下调整建堆for (size_t i (_con.size() - 1 - 1) / 2; i 0; --i){AdjustDown(i);}}*/templateclass InputIteratorpriority_queue(InputIterator first, InputIterator last): _con(first, last){// 将_con中的元素调整成堆的结构//向下调整建堆for (size_t i (_con.size() - 1 - 1) / 2; i 0; --i){AdjustDown(i);}}void push(const T data){_con.push_back(data);AdjustUP(_con.size() - 1);}void pop(){assert(!_con.empty());swap(_con.front(), _con.back());_con.pop_back();AdjustDown(0);}size_t size()const{return _con.size();}bool empty()const{return _con.empty();}// 堆顶元素不允许修改因为堆顶元素修改可以会破坏堆的特性const T top()const{return _con.front();}private:// 向上调整void AdjustUP(int child){int parent (child - 1) / 2;while (child){if (_com(_con[parent], _con[child])){swap(_con[child], _con[parent]);child parent;parent (child - 1) / 2;}else{break;}}}// 向下调整void AdjustDown(int parent){size_t child parent * 2 1;while (child _con.size()){// 找以parent为根的较大的孩子if (child 1 _con.size() _com(_con[child], _con[child 1]))child 1;// 检测双亲是否满足情况if (_com(_con[parent], _con[child])){swap(_con[child], _con[parent]);parent child;child parent * 2 1;}else{break;}}}private:Container _con;Compare _com;}; }仿函数less、greater 仿函数functor是一个能行使函数功能的类或结构体。它实际上是一个可调用的对象可以像调用函数一样来使用它传入参数并获得返回值。与普通函数不同的是仿函数可以保存状态信息并且可以被其他函数调用。为了成为一个仿函数类或结构体必须重载 operator() 运算符。在C中仿函数通常用于STL算法中的自定义排序、查找、过滤等操作。 test1: //仿函数/函数对象 templateclass T struct less {bool operator()(const T left, const T right){return left right;} };templateclass T struct greater {bool operator()(const T left, const T right){return left right;} };int main() {lessint lessFunc;cout lessFunc(1, 2) endl;cout lessFunc.operator()(1, 2) endl;cout lessint()(1, 2) endl; }test2: 仿函数的匿名对象使用 int main() {greaterint g;vectorint v{ 1,3,4,1,0 };sort(v.begin(), v.end(), g);//sort(v.begin(), v.end(), greaterint());//greaterint() -- 匿名对象for (auto e : v){cout e ;}cout endl;cout greaterint()(1, 2) endl;cout g(1, 2) endl; }
http://www.ihoyoo.com/news/44470.html

相关文章:

  • 苏州优秀网站设计长沙网站公司网站建设
  • 怎么建立网站的流程郑州制作网站软件
  • 江门网站优化经验太原建站塔山双喜
  • 网页网站项目综合注册网站建设
  • 如何弄微信小程序店铺怎么做神马搜索排名seo
  • 郑州做网站狼牙微信公众号运营团队
  • 企业网站开发价格360建筑网兼职
  • 青岛网站seo收费潍坊高级网站建设推广
  • 万网虚拟机怎么做两个网站如何登录百度站长平台
  • 游戏周边产品 做网站游戏试玩网站怎么做
  • dw怎么做单页网站客户引流的最快方法是什么
  • 网站备案被拒绝新区seo整站优化公司
  • 网站建设管理人员工作职责wordpress虚拟主机
  • 自适应网站和响应式网站的区别今天的国际新闻最新消息
  • 上海 教育网站建设秀网站模板
  • 长沙哪里有做网站的公司wordpress页面文本编辑器
  • 国外做二手服装网站做视频网站视频放在哪里
  • 免费网站专业建站网站维护年费
  • 天津国际工程建设监理公司网站宝坻建设路小学网站
  • 开家网站建设培训班域名价格查询评估
  • 学校网站设计及代码河南软件开发
  • 网站备案 的类型做钓鱼网站判刑
  • 怎么自己购买域名 建设网站大上海小程序开发
  • 12306网站开发语言网站开发实践意义
  • 怎么做网站底部备案号php一台电脑做网站
  • 枣阳建设局网站可信网站多少钱
  • h5手机网站建设哪家好网站建设与管理难学吗
  • 深圳西丽网站建设公司查看楼盘卖房信息在哪查
  • 浙江建设继续教育网站首页网站如何解析
  • 网站都需要备案吗手机网站怎么导入微信