priority_queue优先队列用法略解
  • 板块学术版
  • 楼主Linktux
  • 当前回复11
  • 已保存回复11
  • 发布时间2023/12/3 13:06
  • 上次更新2023/12/3 14:00:13
查看原帖
priority_queue优先队列用法略解
1185284
Linktux楼主2023/12/3 13:06

在C++中,priority_queue优先队列将优先级高的元素排在前面。例如:

priority_queue<int> q;

定义了一个元素越大优先级越高的队列(大顶堆),当然这是默认值,标准写法是

priority_queue<int,vector<int>,less<int> >

注意:

1.不用写#include <vector>,这里vector只是一个容器,当然要写#include <queue>。

2.优先队列是元素进入时就已经按优先级排序了,而不是只有访问时排序。

3.less<int>和后面的>之间一定要加空格,否则会将两个>看成流传递和右移远算符>>。

要定义了一个元素越小优先级越高的队列(小顶堆)是:

priority_queue<int,vector<int>,greater<int> >

当然int也可以换成char,string,bool等,也可以换成自定义类型,这里用自定义类型Person做个演示:

struct Student{
  int rank;//排名
  string name;//名字
}a[10005];
struct cmp{
  bool operator()(Student x,Student y){
    return x.rank>y.rank;//元素越小优先级越高
  }
};

注意:

1.cmp函数必须是个结构体,与其他两个参数一样,返回要是布尔就要用operator()函数

2.用>是元素越小优先级越高,反之亦然

附priority_queue常用成员函数:

1.top():返回优先级最高的元素。注意!!! 没有front()和back()。

2.empty():如果队列为空,返回真。

3.size():返回队列大小。

4.push(),pop():用法和普通队列一致。注意!!! pop()弹出的是优先级最高的。

priority_queue的用途很广,具体请见P1168 中位数。

本文尚有不足之处,欢迎各位大佬指正,本蒟蒻一定update。

[参考链接]

2023/12/3 13:06
加载中...