今天在写堆和哈夫曼树的ACM题的时候,接触到priority_queue的用法,由于比较函数的难些,请教过队内的红薯和杨大牛后才稍微弄明白些,下面总结如下,首先我是用手写的堆来过题的,其实和照黑书指导上的那个堆的代码差不多。

写完之后就看了下STL里面的priority_queue的用法就开始研究,首先是用了网上找的一个写比较函数的方法是用操作符重载做的。代码如下:

//比较函数
对于结构体
struct heapmin
{
 heapmin(int tx){x=tx;};
 int x;
};
struct heapmax
{
 heapmax(int tx){x=tx;};
 int x;
};
bool operator<(const struct heapmin &a,const struct heapmin &b)
{
  return a.x<b.x;
}//最小堆
bool operator<(const struct heapmax &a,const struct heapmax &b)
{
  return a.x>b.x;
}//最大堆

然后就可以用STL里面给的那些push,pop,top,size,empty函数了。

然后由于G++一直跑的RE所以我想把结构体改成里面只是存int型整数,然后就瓜起了,不会写了,自己仿照sort里面那个比较函数写是错的,然后我就不会写了,就去群里问人,得到两种方法,

一个是用stl里面#include<functional>里面的great<int> less<int>最比较函数写,我试了下,是可以的。谢谢红薯;

代码如下:

//比较函数
#inclulde<iostream>
#include<functional>
priority_queue< int, vector<int>, great<int> >//最小堆
priority_queue< int, vector<int>, less<int> >//最大堆

然后就是杨大牛的方法,把比较函数写成结构体的形式,代码如下:

#include<iostream>
#include<queue>
using namespace std;
struct cmp
{
 bool operator()(const int &a,const int &b)
 {
  return a>b;//最大堆
  return a<b;//最小堆
 }
};
priority_queue< int, vector<int>, cmp >

用了上面的所有方法做了poj1442

http://162.105.81.212/JudgeOnline/problem?id=1442

结果发现用STL的效率没有自己手写的那个高,也可能是我不是很熟悉STL吧。我问了人,他们说里面的容器的效率不是很高,但是<algorithm>里面的函数写的效率很高,其实时间跑的是一样的,但是内存STL占的比手写的多。

不过说实话STL还是蛮好用的,从sort开始结识到STL,到next_permutation,stack,priority_queue等,发现这些还是很好用的,以后得多加学习一下,多熟悉一下,在TC的比赛中还是很好用的。当然这些好的数据结构自己手写还是要实现一下的。

priority_queue 用法总结相关推荐

  1. 优先队列priority_queue 用法详解

    优先队列priority_queue 用法详解 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序 每次的push和pop操作,队列都会动态的调整,以达 ...

  2. C++ priority_queue用法

    列举了四种用法,分别是默认降序.内置的greater升序.重载<运算符.仿函数. #include <cstdio> #include <cstring> #includ ...

  3. ural 1306. Sequence Median(优先级队列 priority_queue用法)

    最近做的ural的题目总是各种错,看了解题报告都是自己没学过的玩意,有点受打击,不过ural的题目质量还是挺好的,多被虐虐有益健康. 这一题要是用数组直接超内存,用优先级队列做,刚接触这个,学习一下优 ...

  4. 用法 stl_【c++】STL里的priority_queue用法总结

    https://blog.csdn.net/xiaoquantouer/article/details/52015928 1.头文件 #include<queue> 2.定义 priori ...

  5. 【转】c++优先队列(priority_queue)用法详解

    既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...

  6. c++优先队列(priority_queue)用法详解

    既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...

  7. C++ 常用容器成员函数用法总结

    C++ 常用容器成员函数用法总结 C++ 常用容器成员函数用法总结 简介 迭代器 简介 array: 静态数组 简介 构造函数 访问 / 赋值 迭代器 下标 / at 批量赋值 swap (交换函数) ...

  8. Leetcode 703. 数据流中的第K大元素 解题思路及C++实现

    解题思路: 使用一个最小堆来存储数据,在C++中,对应是#include<queue>头文件中的priority_queue. 程序逻辑:KthLargest类初始化的时候,先根据nums ...

  9. C++ STL 一般总结

    以下内容来源网上 经过整合而成 一.一般介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ ...

最新文章

  1. Redis 集群部署及踩过的坑
  2. su 和su -的区别
  3. Spring(3)——装配 Spring Bean 详解
  4. 中报亮眼,阅文的增长“飞轮”是如何练成的?
  5. 定制Sublime主题
  6. 投资学习网课笔记(part2)--基金第二课
  7. linux lcd显示流程,求助 armlinux中实现lcd显示
  8. java的foeachr循环_for循环和Dowhile循环的应用
  9. JSP语法(JSP动作)
  10. [蓝点zigBee] CC2530 实用教程总览
  11. java 中PriorityQueue优先级队列使用方法
  12. Atitit.远程文件技术 webdav ftp scp ssh-sftp http nfs smb 的区别与总结
  13. Python进行模糊匹配
  14. matlab fisher z变换,科学网—胜过 Fisher z 变换!(2) - 杨正瓴的博文
  15. 客户的sample和项目计划
  16. 【基础知识】~ 建立时间/保持时间
  17. OS X: Messages Agent wants to use the login keychain
  18. 数值型数据的表示(1.0)
  19. 机器视觉硬件—相机镜头的选型
  20. 独立成分分析 与 功能连接之间的关联尝试 by 张高燕

热门文章

  1. HibernateAnnotation入门实例
  2. 迷茫中,要让人生更精彩
  3. ASP Webshell查***代码的小东东
  4. delphi windows编程_学习C/C++:伴随我成长的编程书!
  5. HTTP GET/CONNECT代理区别
  6. Git学习系列(七)Bug和Feature分支管理详解
  7. CoreAnimation-CATransform3D特效
  8. BZOJ 1015 [JSOI2008]星球大战starwar (逆序并查集)
  9. MySQL常用命令操作大全
  10. 系统架构师复习-操作系统