在STL中,priority_queue的底层实现是利用堆。

priority_queue没办法实现O(1)复杂度进行任意元素的删除操作,可用利用两个priority_queue来实现。具体代码如下所示。

push()  给队列中插入元素。

pop()    弹出队首元素。

top()     显示队首元素。

empty()  判断队列是否为空。

erase()  删除队列中任意元素,仅仅是任意元素(即参数为队列中元素)。

#include <queue>typedef struct PRIORITY_QUEUE {struct DTYPE {int x;int y;int z;bool operator == (const DTYPE& temp) const {return this->x == temp.x && this->y == temp.y && this->z == temp.z;}};struct COMP  {bool operator ()(const DTYPE& a_ele, const DTYPE& b_ele) {if (a_ele.x == b_ele.x) {return a_ele.y > b_ele.y;}return a_ele.x < b_ele.x;}};priority_queue<DTYPE, vector<DTYPE>, COMP> save_queue, del_queue;void push(const DTYPE& elememt) {save_queue.emplace(elememt);}bool empty() {return save_queue.empty();}DTYPE top() {while (!del_queue.empty() && del_queue.top() == save_queue.top()) {del_queue.pop();save_queue.pop();}DTYPE zero = { NULL, NULL, NULL };return save_queue.empty() ? zero : save_queue.top();}void pop() {while (!del_queue.empty() && save_queue.top() == del_queue.top()) {save_queue.pop();del_queue.pop();}if (!save_queue.empty()) {save_queue.pop();}}void erase(const DTYPE& element) {del_queue.push(element);}void show(const DTYPE& temp) const {cout << temp.x << " " << temp.y << " " << temp.z << " " << endl;}}priqueue;int main() {priqueue p_queue;;p_queue.push({2,1,3});p_queue.push({ 255,43,3 });p_queue.push({ 23,1,56 });p_queue.push({ 212,5,3 });p_queue.push({ 12,234,234 });p_queue.push({ 27644,34556,34 });p_queue.erase({ 212,5,3 });p_queue.show(p_queue.top());p_queue.pop();p_queue.show(p_queue.top());p_queue.pop();p_queue.show(p_queue.top());p_queue.pop();p_queue.show(p_queue.top());p_queue.pop();p_queue.show(p_queue.top());p_queue.pop();return 0;
}

priority_queue删除相关推荐

  1. Oracle所有错误类型

    ORA-00001: 违反唯一约束条件 (.)  ORA-00017: 请求会话以设置跟踪事件  ORA-00018: 超出最大会话数  ORA-00019: 超出最大会话许可数  ORA-00020 ...

  2. oracle常用errcode

    ORA-00001: 违反唯一约束条件 (.)     ORA-00017: 请求会话以设置跟踪事件      ORA-00018: 超出最大会话数      ORA-00019: 超出最大会话许可数 ...

  3. C++ Stack Queue priority_queue

    栈stack:stack 后入先出(LIFO) q.top() 获取栈顶元素(并不删除) q.pop() 删除栈顶元素 q.push(x) 向栈中加入元素 q.empty() 判断栈是否为空 队列qu ...

  4. c++ std::priority_queue优先队列

    template <class T, class Container = vector<T>,class Compare = less<typename Container:: ...

  5. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入

    操作系统是Windows10 64bit,编译器是 Microsoft Virtual Studio Community 10.编译产出是64位测试程序.(转载请指明出于breaksoftware的c ...

  6. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入

    操作系统是ubuntu 18.04.1 server amd64,gcc是 7.3.0.编译产出是64位测试程序.(转载请指明出于breaksoftware的csdn博客) 因为加入测量,就会导致误差 ...

  7. C++STL 优先队列priority_queue使用

    头文件:#include <queue> 一.申明方式 std::priority_queue<T> q; std::priority_queue<T, std::vec ...

  8. STL queue priority_queue

    queue 队列 queue 队列 就像排队一样,后来的排在后面,先来的先出队.所以只能对队首和队尾的元素进行操作 back() 返回最后一个元素 empty() 如果队列空则返回真 front() ...

  9. 可删除任意位置数据的堆

    struct heap {//手写实现删除任意位置数值的堆priority_queue<int> A , B;void push(int x) {A.push(x);}void erase ...

最新文章

  1. 【Qt】通过QtCreator源码学习Qt(三):linux平台的信号、程序崩溃处理
  2. python写文件读文件-Python 实例:读写文件
  3. 汇编语言 8086+8255A仿真中断控制
  4. Splay(区间翻转) 模板
  5. python捕捉warning_python – 如何格式化logging.captureWarnings捕获的警告?
  6. Windows环境下通过lynx查看隐藏链接识别黑链方法
  7. AutoCAD2020命令提示框信息设置
  8. Spring bean生命周期详解
  9. WebRTC + JsSIP + freeSWITCH一对一视频聊天
  10. lisp 多段线转面域_CAD自定义线型,lisp多段线绘制方向 | 伙计百科
  11. mac excel 函数
  12. linux修改u盘mbr,远景论坛U盘版 完美 4G/8G/16G WINPE+LINUXPE+MACPE+10.9正式版MBR安装版 制作超简单...
  13. 微信支付商家转账到零钱功能使用教程
  14. 基本求导法则与导数公式
  15. MySQL:Can't create test file XXX.lowe-test
  16. 姿态角解算(MPU6050 加速度计加陀螺仪)
  17. Ubuntu扩展系统根目录磁盘空间
  18. 无线射频专题《协议类,IEEE 802.11/802.11b/802.11a/802.11g/802.11n/802.11ac标准简介》
  19. github项目首页播放小视频啦!
  20. window server 2012 更改密钥 更改系统序列号

热门文章

  1. 【RGB3DS道路检测车智慧运维解决方案】助力城市道路运维数字化转型
  2. 开发板移植jpeg图片库与freetype字库
  3. ibatis.cache接口实现:RedisCache,MemcachedCache,EhcacheCache
  4. 技术专栏|剖析-单目相机在旋翼机上的速度测量原理
  5. 转:如何解决VC 应用程序无法启动,因为应用程序的并行配置不正确 sxstrace.exe问题...
  6. 【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(频率特性测试仪)】
  7. 西点军校二十二条军规
  8. 【漏洞分析】Discuz X3.3补丁安全分析
  9. 怎么看QQ好友是否隐身
  10. 为什么在fonts文件夹菜单中没有“安装新字体”选项