队列(queue):
队列是数据结构中的一种,队列只限定在一端进行插入,另一端进行删除的特殊线性表,顾名思义,就像我们排队,最先排队的人买完东西后最先从队伍离开,就是我们所说的first in first out。
头文件:#include <queue>
定义:queue <数据类型,包括自定义的数据类型> 队列名;
//queue <int> q
几种几本操作:
empty() -- 返回bool型,表示queue是否为空 (q.empty() )
size() -- 返回queue内元素个数 (q.size() )
front() -- 返回queue内的下一个元素 (q.front() )
back() -- 返回queue内的最后一个元素(q.back() )
pop() -- 移除queue中的一个元素(q.pop(); )
push(data_type a) -- 将一个元素a置入queue中(q.push(a); )
优先队列(priority_queue):
通俗点说就是一个可以进行自动排序的队列。
头文件:#include <queue>
一般定义:priority_queue <数据类型,包括自己定义的数据类型> 队列名;//采用的默认优先级大顶堆,既从大到小排序
习惯使用的几种定义:
priority_queue <int ,vector<int>,less<int> > q;//最大值优先队列,需要注意的是最后> >中间要有空格,否则是位运算
priority_queue <int ,vector<int>,greator<int> > q;//最小值优先队列
我们还可以使用自己定义排列顺序,这时候需要进行结构体的重载,其实说实话还确实不是很懂,运算符重载还没有学透,现在只能是照葫芦画瓢,后续我学明白了再进行补充,对不住了(双手合十)
priority_queue<int,vector<int>,cmp1>q;//最小值优先
struct cmp1
{
bool operator ()(int &a,int &b)
{
return a>b;//最小值优先 ,大于号含义相反
}
};
priority_queue<int,vector<int>,cmp2>q;//最大值优先
struct cmp2
{
bool operator ()(int &a,int &b)
{
return a<b;//最大值优先,小于号含义相反
}
};
priority_queue<node1>q; //自定义优先级
struct node1
{
int u;
bool operator < (const node1 &a) const //重载了小于号
{
return u>a.u;//最小值优先
}
};
priority_queue<node2>q; //自定义优先级
struct node2
{
int u;
bool operator < (const node2 &a) const //重载了小于号
{
return u<a.u;//最大值优先
}
};
基本操作:
q.push(elem) 将元素置入优先队列
q.top() 返回优先队列的下一个元素
q.pop() 移除一个元素
q.size() 返回队列中元素的个数
q.empty() 返回bool值判断优先队列是否为空