队列
头文件:
#include <queue>
定义:
queue<typename> name;
//typename为任意数据类型,name为所定义队列名
常用函数:
函数名 | 返回值 |
---|---|
q.empty( ) | 判断队列是否为空 |
q.size( ) | 返回当前队列元素个数 |
q.pop( ) | 删除队首元素 |
q.push(x) | 向队尾添加元素 |
q.front( ) | 返回队头元素 |
q.back( ) | 返回队尾元素 |
优先队列
简介:
即数据结构中的堆,不按照入队顺序输出元素,而是根据关键字优先级输出,默认是从大到小输出。
头文件:
#include <queue>
定义:
- 默认方式,队内元素按照从大到小排列
priority_queue<typename> name;
//typename为任意数据类型,name为所定义优先队列名
- 变式1:队内元素按照从小到大排列
priority_queue<Type, Container, Functional> name;
/**
第一个参数表示数据的类型;
第二个参数保存该数据类型数据的容器(默认情况下为vector)
第三个参数表示自定义的优先级规则(greater表示从小到大,默认为less,表示从大到小)
**/
priority_queue<int, vector<int>, greater<int> > q;//队内元素从小到大排列,小顶堆
priority_queue<string> q;//队内元素从大到小排列,大顶堆
//这里要有个空格,否则会被识别为右移符号
- 变式2:数据类型不再是基本数据类型,而是自定义类型
//方法1:在结构体内重载运算符<
struct data
{
int x;
string s;
bool operator<(const data& a) const
{
return x < a.x;
}
}
//方法2:重写operator()
struct data
{
int x;
string s;
}
struct comp
{
bool operator() (data a, data b)
{
return a.x < b.x;
}
}
priority_queue<data, vector<data>, comp> q;
常用函数:(仅给出与队列有差别的函数)
函数 | 作用 |
---|---|
q.top( ) | 输出优先队列的队首元素,即堆顶元素 |
有机会再更原理,现在还没学…