优先队列是队列的一种,但是自身具有一定的排序功能,所以不具有队列“先进先出”的性质

刚刚接触优先队列,看过网上的用法后感觉还是太过于朦胧,所以打算自己写一个稍微细节一点的。

头文件

#include<queue>

常用操作

q.push() //放入元素
q.pop() //弹出元素
q.empty()//判断队列是否为空
q.top()//返回头部元素
q.size()//返回队列元素个数

声明方式

priority_queue<int>q;

默认的情况是大顶锥,及先输出的是元素较大的;

如:输入5个数字:1 2 3 4 5 则输出为: 5 4 3 2 1

priority_queue<int,vector<int>,less<int> >q1;
priority_queue<int,vector<int> ,greater<int> > q2;

上面两种为标准的创建方式,第一个元素为元素类型,第二个为承装元素的容器,第三个为排列方式。

其中,用less<int> 作为排序方式,则输出为从大到小;

用greater<int>作位排序方式,则输出为从小到大;

换句话说,less对应小根堆,greater对应大根堆。

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node
{
int l,r;
inline bool operator <(const node &a)const{
return r<a.r;
}
};
int main()
{
priority_queue<node>w;
for(int i=;i<=;i++)
{
int m,n;
scanf("%d%d",&m,&n);
w.push((node){m,n});
}
while(!w.empty())
{
node s =w.top();
w.pop();
cout<<s.l<<" "<<s.r<<endl;;
}
}

上面的代码就是今天主要的分享内容:构造结构体来重新定义比较先后及顺序。

struct node
{
int l,r;
inline bool operator <(const node &a)const{
return r<a.r;
}
};

结构题里面包含两个部分:第一是数据区域。第二部分就是重新定义比较级的代码

关键在于重新定义比较级的 return;

如果你需要返回上面两组数据中第一个较大的数,就需要 return l<a.l (这里注意是小于号,与重构比较基函数相反)

而需要返回两组数据中第二个比较大的数,就需要 return r<a.r

同理,优先输出较小的数,和上面类似。

当然,也可以在里面按照自己的需要自己进行设计构造。

以上。

C++ STL——优先队列的结构体表示方法的更多相关文章

  1. 六、golang中的结构体和方法、接口

    结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...

  2. Go part 5 结构体,方法与接收器

    结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...

  3. go结构体的方法和普通函数

    package main import ( "fmt" "math" ) type vertex struct { X, Y float64 } //值接收者是 ...

  4. go 结构体与方法

    go 结构体与方法   go 结构体相当于 python 中类的概念,结构体用来定义复杂的数据结构,存储很多相同的字段属性 结构体的定义 1.结构体的定义以及简单实用 package main imp ...

  5. go结构体与方法

    go结构体相当于python中类的概念 结构体用来定义复杂的数据结构,存储很多相同的字段属性 1.结构体的定义以及简单实用 package main import ( "fmt" ...

  6. Go 语言 结构体和方法

    @ 目录 1. 结构体别名定义 2. 工厂模式 3. Tag 原信息 4. 匿名字段 5. 方法 1. 结构体别名定义 变量别名定义 package main import "fmt&quo ...

  7. Go基础之--结构体和方法

    结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...

  8. go的基结构体如何使用派生结构体的方法

    将派生类的方法声明为接口嵌入到基结构体中,派生结构体声明该接口为自身.

  9. go_结构体和方法

    面向对象:go语言仅支持封装不支持继承和多态 所以go语言没有class,只有struct(结构体) 无论地址还是结构本身,一律用 . 来访问成员 go语言编译器可以自动区分是值传递还是指针传递,值传 ...

随机推荐

  1. jdk1.7扩容时,不论是否有链表,并发都可能出现循环链表

    扩容时使用transfertransfer不同于put时的判断hash冲突,直接使用头插法,如果没有冲突,则next为null.如下:e.next = newTable[i];newTable[i] ...

  2. 开发STM32MP1,你需要一块好开发板

    STM32MP1系列的出现吸引了很多STM32的新老用户的关注,但是很多的人都会担心一个问题:以前是基于Cortex M系列MCU惊醒开发,对于cortex-A架构的处理器以及Linux系统都不熟悉. ...

  3. uni-app,vue,react,Trao之缓存类封装

    uni-app,vue,react,Trao之缓存类封装 一,介绍与需求 1.1,介绍 缓存主要分为如下几个 1.LocalStorage LocalStorage是永久性的本地缓存,存储在客户端的浏 ...

  4. sg函数的变形 - 可以将一堆石子分开

    Nim is a two-player mathematic game of strategy in which players take turns removing objects from di ...

  5. Python工具类(二)—— 操作时间相关

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = '操作时间的工具类' "" ...

  6. 如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了

    经常听同事抱怨,订单来源又加了一种,代码又要加一层if-else判断,光判断订单来源的if-else就好几百行代码,代码我都不想看了,相信很多同行都有过这样的感受! Java的二十几种设计模式背的滚瓜 ...

  7. [bzoj4447] [loj#2010] [Scoi2015] 小凸解密码

    Description 小凸得到了一个密码盘,密码盘被等分成 \(N\) 个扇形,每个扇形上有一个数字(0-9),和一个符号("+"或"*") 密码盘解密的方法 ...

  8. [总结]ACM模拟总结

    1.心态一定要稳,千万不要慌. 2.内部交流要多点,说不定就讨论出有用的性质了. 3.题目细节一定要想清楚. 4.一道题绝对不能让多个人来写. 5.英语要好好学.

  9. 光流法draw_flow()函数报错

    光流法draw_flow()函数报错 import cv2 from scipy import * def draw_flow(im, flow, step=16): ""&quo ...

  10. ES6笔记分享 part 1

    ECMAScript ES6 从一脸懵逼到灵活运用 var let const var let const 的比较 声明与赋值 var声明的变量是可以重新赋值的,也可以重复声明 let和const声明 ...