优先级队列
元素在进入优先级队列时,没有任何限制,但在退出时却有一个标准。我们可以把优先级队列想象成数据元素的集合,元素就像被随便丢尽桶里一样,彼此没有什么联系,删除数据时就像把手伸进桶里,挑一个优先级最大的出来。
优先级队列的实现
STL priority_queue类是通过堆来实现优先级队列的
加入和删除一个结点的时间复杂度都是O(log2n)
优先级队列的构造函数
priority_queue():优先级队列,数据类型T必须实现关系运算符<
优先级队列的操作
bool empty() const:检查队列是否为空
void pop():从优先级队列中删除优先级最大的元素
void push(const T &iteam):向优先级队列中插入一个元素
int size() const:返回优先级队列中放入元素数
T &top():返回具有最高优先级的元素的引用
const T &top() const :常量版的top()
默认情况下,优先级队列假定凡具有最大值的元素也具有最大的优先级。就是说,如果x和y是优先级队列中中的两个元素,并且x<y,那么y比x具有更大的优先级。
举例如何使用priority_queue对象
priority_queue<int> que1;
int n;
que1.push(10);
que1.push(20);
cout<<que1.size()>>" "<<que1.top();
n=que1.pop();
if(!que1.empty())
{
que1.pop();
}
cout<<que1.size();
找出前10小元素
int main()
{
vector<int> vec;
for(int i=0;i<200;++i)
{
vec.push_back (i);
}
priority_queue<int,vector<int>,less<int>> que1;//大根堆
for(int i=0;i<10;++i)
{
que1.push (vec[i]);
}
for(int i=10;i<200;++i)
{
if(vec[i]<que1.top())
{
que1.pop();
que1.push(vec[i]);
}
}
while(!que1.empty())
{
cout<<que1.top()<<" ";
que1.pop();
}
cout<<endl;
return 0;
}`