STL适配器之priority_queue

来源:互联网 发布:讲课视频软件 编辑:程序博客网 时间:2024/05/16 04:10

1、基本概念

  priority_queue本质上也是一个queue,但在其基础上加入了权值的概念,入队依然是依次入队,但出队的时候却是权值最高的元素先出队,以满足一些特殊的需求。heap将极值放到头节点,可以很好的满足priority_queue的需求。默认情况下,priority_queue使用vector作为底层容器,使用max-heap进行规制处理。

2、基本用法

  priority_queue是在heap的基础上进行的封装,使用起来是很简洁的,以下是测试代码:

int data[9] = {0,1,2,3,4,8,9,3,5};priority_queue<int> a(data,data+9);cout<<"size:"<<a.size()<<endl;  //size:9while (!a.empty()){    cout<<a.top()<<" "; //9 8 5 4 3 3 2 1 0    a.pop();}cout<<endl;

  这里,我们主要关注一下priority_queue的push和pop操作。由于heap算法本身并不处理数据的插入删除操作,因而这部分需要交由底层容器进行处理,以下是push和pop的实现源码:

void push(const value_type& __x) {   __STL_TRY {     c.push_back(__x);      push_heap(c.begin(), c.end(), comp);   }   __STL_UNWIND(c.clear()); } void pop() {   __STL_TRY {     pop_heap(c.begin(), c.end(), comp);     c.pop_back();   }   __STL_UNWIND(c.clear()); }

  这里实际是容器和算法结合使用的结果,单独使用其中一个是达不到我们想要的目的的。

3、迭代器

  priority_queue也是对元素使用了特殊的规则进行约束,不提供遍历操作,也不提供迭代器。

0 0