常用查询库 stack、queue、priority_queue
stack
队列是一种后入先出的数据结构
Last in First out;
stack声明
stack定义在头文件<stack>中,用stack<int>s的方式声明一个栈。
stack常用操作
1. 压栈操作 s.push_back();
2. 出栈操作 s.pop();
3. 返回栈顶元素 s.top();
3. 判断空栈 s.empty(); 如果栈为空返回true,否则返回false
4. 栈内元素个数 s.length();/s.size();
Tip
栈没有clear()操作,若是要清空一个栈,可以写成
while(!s.empty()){
s.pop();
}
queue
队列是一种先入后出的数据结构
Fisrt in First out;
queue声明
queue定义在头文件<queue>中,用queue<int>s的方式声明一个队列。
queue常用操作
1. 入队列操作 s.push();
2. 出队列操作 s.pop();
3. 返回队头元素 s.front();
3. 判断空队列 s.empty(); 如果栈为空返回true,否则返回false
4. 队列内元素个数 s.length();/s.size();
priority_queue
优先队列行为有些像队列,但先出队列的元素不是先进队列的元素,而是队列中优先级最高的元素。
priority_queue声明
priority_queue也定义在头文件<queue>中,用priority_queue<int>s的方式声明一个队列。
此int型优先队列是 越小的整数优先级别越低的队列。
事实上,其原型为
priority_queue<Type, Container, Functional>
Type 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。
Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.
STL里面默认用的是 vector. 比较方式默认用 operator<
因此,若是缺省了第三个参数的话,只要定义了“小于”运算符,即可使用优先队列。
特殊情况下,需要自定义比较方式:
struct cmp(){
bool operator()(const ElemType a,const ElemType b)const{
return …………;
}
};
则优先队列声明为
priority_queue<Type, Container, cmp>s;
priority_queue常用操作
几乎同queue
值得注意的是,取队首元素不用s.front();而是使用s.top();