C++ STL——优先队列的结构体表示方法

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

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

头文件

#include<queue>

常用操作

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

声明方式

priority<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=1;i<=5;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

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

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

以上。

原文地址:https://www.cnblogs.com/wangqiqq/p/12258908.html

时间: 2024-10-07 22:05:50

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

关于物体 &#39;固有类别&#39; 与 &#39;实际使用类别&#39; 分离的情况,结构体定义方法

在面向接口.面向对象编程的过程中,会遇到实际物体类别与定义类别相分离的情况. 例如,我们有三种物体,他们的固有类别分别为: TYPEA,TYPEB,TYPEC.在我们实际使用过程中,我们会根据不同的情况将他们分成 2 组: Group1,Group2. 那么,我们在定义结构体和物理类别时,需要注意对 Group 进行定义.定义物体具体属性和结构体如下: #define TYPEA (0x01UL << 0) #define TYPEB (0x01UL << 1) #define T

go结构体与方法

go结构体相当于python中类的概念 结构体用来定义复杂的数据结构,存储很多相同的字段属性 1.结构体的定义以及简单实用 package main import ( "fmt" ) func main() { type Student struct { //定义结构体 name string age int } s1 := new(Student) // 定义指向结构体的指针 s1.name = "xiaomu" s1.age = 10 fmt.Printf(&q

C语言结构体初始化方法

早上苏凯童鞋问我这个问题来着,写在这里. 我了解到的C中结构体初始化的方法大概有三种. 如这里我定义了一个结构体: typedef struct node { int x, y; }Node; 第一种: Node a = {1, 2}; 第二种: Node b = {x:1, y:2}; 第三种: Node c = { .x = 1, .y = 2 } 当然,上述的初始化方法不是必须每个成员都要初始化,可以指定初始化. 附上一个不错的学习链接:点我

golang之结构体和方法

结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语言放弃了包括继承在内的大量面向对象的特性,只保留了组合这个基础的特性.所有的Go语言类型除了指针类型外,都可以有自己的方法. 先通过一个下的例子理解struct. package main import "fmt" type Student struct { Name string Age

go_结构体和方法

面向对象:go语言仅支持封装不支持继承和多态 所以go语言没有class,只有struct(结构体) 原文地址:https://www.cnblogs.com/luffe/p/8548517.html

typedef struct 指针结构体使用方法

A>>>>>>>>>>>>>>>>>>>>>>>> typedef struct                {                    ...                    ...                }POINT,*POINT_P;  POINT为结构名,这个名字主要是为了在结构体中包含自己为成员变量的时候有用        

【NWERC2015】【BZOJ4425】 AssigningWorkstations分配工作站 贪心优先队列加结构体快排

Assigning Workstations Time Limit: 20000ms, Special Time Limit:50000ms, Memory Limit:65536KB Total submit users: 7, Accepted users: 4 Problem 13604 : No special judgement Problem description Penelope is part of the admin team of the newly built super

Rust中的结构体及方法语法

这个可以和类作比较,或是go当中的方法比较. #[derive(Debug)] struct Rectangle { width: u32, height: u32, } impl Rectangle { fn area(&self) -> u32 { self.width * self.height } fn square(size: u32) -> Rectangle { Rectangle {width: size, height: size} } } impl Rectangl

C语言 &#183; 运用结构体的排序方法

之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目了. 首先头文件(基于大牛的方法,本人之后做题喜欢引入题目中常用的五个头文件) #include<stdlib.h> #include<string.h> 定义结构体: /*定义一个结构体*/ typedef struct Stu{ char name[10]; int id; int score; }stu; 注释:最后一行stu是别