优先队列相关
写这个是因为补题要用到优先队列。
概念:
优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有*先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。 这个东西呢STL里面是有的,可以拿来直接用,很方便,至于手写的话,先等我学了堆的操作再说吧。。 定义一个优先队列: priority_queue <int> Q; //默认从大到小排序priority_queue <int,vector<int>,less<int> > Q; //STL自带的可以方便的从大到小排序 priority_queue <int,vector<int>,greater<int> > Q; //STL自带的可以方便的从小到大排序 //int 换成 node 等结构体也可以,总之就是类型 队首元素使用top()函数取出,push()入队一个元素,会根据优先级自动排列,所有操作均为logn时间完成 当需要根据题目要求,对与结构体,优先级定义更为复杂时,有两种处理方法。 1.重载运算符。 一般重载运算符时,都是 < 重载。
struct E
{
int v,w;
bool operator< (const E& b) const
{
return w > b.w;
}
};
struct E
{
int v,w;
friend bool operator< (E x,E y)
{
return x.w>y.w;
}
};