什么是STL

以下内容摘自这儿

STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。

是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

  1. 堆中某个节点的值总是不大于或不小于其父节点的值;
  2. 堆总是一棵完全二叉树。

将根节点最大的堆叫做最大堆或 大根堆,根节点最小的堆叫做最小堆或 小根堆。常见的堆有 二叉堆、斐波那契堆等。

大根堆的STL实现

以下代码在 Dev-C++ 5.7.1 中可以编译通过。

  1. 声明一个存储 int 类型的大根堆 hep
priority_queue<int> hep;
  1. 声明一个存储 int 类型的小根堆 hep
priority_queue<int,vector<int>,greator<int> >

注意:greator<int> 和右边的 > 之间的空格不可略去。

  1. 声明堆需要加载头文件
#include<queue>
#include<algorithm>

使用 std 名字空间

using namespace std;

使用STL的缺点,就是常数大。

下面我们以 luoguP3378\text{luoguP3378}luoguP3378 为例,讲解 priority_queue 的调用方法。

题目描述 luoguP3378\text{luoguP3378}luoguP3378

你需要写一个数据结构,支持以下操作:

  1. 插入一个数;
  2. 询问当前最小的数;
  3. 压出当前最小的数。

操作次数 N≤106N\leq 10^6N≤106。

Solution 3378\text{Solution 3378}Solution 3378

Tips:另一种实现小根堆的做法是,存储原数的相反数,查询时再取反输出。详见代码。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue> #define reg register using namespace std; priority_queue<int> hep;
int n;
int s1,s2; int main(){
scanf("%d",&n);
for(reg int i=1;i<=n;++i){
scanf("%d",&s1);
switch(s1){
case 1:
scanf("%d",&s2);
hep.push(-s2); //将新元素的相反数压入堆
break;
case 2:
printf("%d\n",-hep.top()); //取出堆顶元素
break;
case 3:
hep.pop(); //弹出堆顶元素
break;
default:
break;
}
}
}

最新文章

  1. 五、jquery使用工具函数
  2. 【Android自学日记】搭建Android开发环境
  3. GitHub &amp; Bitbucket &amp; GitLab &amp; Coding 的对比分析
  4. log4j1 插入mysql
  5. Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系
  6. 基于系统的UIMenuController的使用及自定义UIMenuItem
  7. Oracle EBS PO 收接事处理状态待定或错误
  8. Linux 网络相关命令
  9. 如何解决 Java 安全问题?
  10. 【转】iOS-Core-Animation-Advanced-Techniques(二)
  11. IBatis.Net获取执行的Sql语句
  12. 在ASP.NET MVC3项目中,自定义404错误页面
  13. oracle xe 数据库用户操作
  14. VUE插件-图片濑加载
  15. springmvc图片上传(兼容ie8以上,实时预览)
  16. 19.JavaScript
  17. docker-compose部署ELK
  18. linux下mycat自启动方法
  19. j.u.c系列(06)---之锁条件:Condition
  20. 能把opencv的源码也进行调试吗?(需要pdb文件才行)

热门文章

  1. Java多线程(十四):Timer
  2. dart 大文件读取
  3. Linux 中 Xampp 的 https 安全证书配置
  4. Android四大组件之服务的两种启动方式详解
  5. [Advanced Python] 10 - Transfer parameters
  6. 【Java】SpringBoot 中从application.yml中获取自定义常量
  7. 验证fstab文件修改是否正确
  8. Jmete压力测试、并发测试的简单方法
  9. 第八届蓝桥杯java b组第五题
  10. centos7下mongoDB安装和配置