queue是队列,是一种先进先出的数据结构
类模板如下:
template < class T, class Cont = deque<T> >
class queue{
...
};
Cont指定实现的类型,默认是deque,也可以用list
定义队列的示例:
queue<int> q;
成员函数
q.push(i); //将i添加到队列末尾
q.pop(); //弹出队列第一个元素
q.top(); //返回或修改第一个元素
q.front(); //返回或修改第一个元素 这两个成员函数在不同的编译器有不同的支持
q.size(); //返回队列元素个数
q.empty(); //判断队列是否为空
q.back(); //返回队列最后一个元素
优先队列
优先队列就是对队列中的元素进行排序。
默认用vector实现,也可以用deque实现
类模板定义:
template < class T, class Container = vector <T>, class Compare = less<T> >
class priority_queue{
...
};
T的元素类型
Container是容器类型
Compare的元素比较器
与set不同,priority_queue是用堆排序来实现的,所以元素在内部不是有序的,但是总还是能保证最大的元素在堆顶
优先队列定义:
priority_queue<Type, Container, Functional>
//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;
//greater和less是std实现的两个函数对象类(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个函数对象类了)
q.push();
q.top(); //返回优先队列最上边的元素
q.pop();
q.empty();
q.size();
如果是自定义的结构体,可以进行运算符的重载来进行比较排序。
举例:
priority_queue<int> q;
q.push(2);
q.push(5);
q.push(6);
q.push(3);
cout<<q.size()<<endl;
while(q.empty() == false){
cout<<q.top()<<" ";
q.pop();
}
cout<<endl;
cout<<q.size()<<endl;
输出
4
6 5 3 2
0