pb_ds(2)

priority_queue

priority_queue是pb_ds中的优先队列类,与stl中的priority_queue对应。但是pb_ds中的优先队列具有更加强大的功能。使用priority_queue要包含头文件priority_queue.hpp。一般如下使用

template<typename Value_Type,typename Cmp_Fn=std::less<Value_Type>,typename Tag=pairing_heap_tag, typename Allocator=std::allocator<char> >class priority_queue : public detail::priority_queue_base_dispatch<Value_Type,Cmp_Fn,Tag,Allocator>::type

priority_queue中有5种tag,分别是binary_heap_tag(二叉堆),binomal_heap_tag(二项堆),pairing_heap_tag(配对堆),thin_heap_tag(斐波那契堆),rc_binomal_heap_tag(不知为何物)。
通常我们使用的都是默认参数,也就是配对堆,其性能已经远比stl中的优先队列优秀。
priority_queue中支持下列几种基本操作:
1.point_iterator push(int key) //point_iterator为迭代器
2.void modify(point_iterator ptr,int key) //修改迭代器指向的元素
3.void erase(point_iterator ptr) //清除迭代器指向的元素
4.int top()
5.void pop()
6.bool empty()
7.void clear()
注意,pb_ds的插入是会返回一个迭代器的,我们可以用数组将迭代器存起来,再用modify进行修改,就可以实现可修改了,同时也自然可以使用erase进行删除操作了。
priority_queue还支持以下几种有用的其他操作:
1.point_iterator begin()
2.point_iterator end()
3.void join(priority_queue &other)
1,2两个操作实现了priority_queue的遍历,而join操作,则使priority_queue变成了可并堆,从而大大增强了priority_queue的适用范围。
注意:join操作完后,other会被清空。
想了解更多的同学,建议看这篇文章。

没有更多推荐了,返回首页