5.优先队列作为堆
在有些算法设计种用到堆,堆采用STL的优先队列来实现,优先级的高低由队列中数据元素的关系函数(比较运算符)确定,很多情况下需要重载关系函数。
优先队列(堆)头文件:#include< queue >
大根堆定义:priority_queue< int >pq
小根堆定义:priority_queue< int ,vector< int >,greater< int > >pq
(注意最后两个“>”符号不要连在一起,否则会被很多(但不是所有)编译器误认为是‘>>’运算符)
操作:
push() 元素入队
pop() 队首元素出队
top() 取队首元素
empty() 如果队列为空,则返回true(1),否则返回false(0)
size() 返回优先队列中拥有的元素个数
(1) 元素为内置数据类型的堆
对于C/C++内置数据,默认时以less(小于关系函数)作为关系函数,值越大,优先级越高(即大根堆),可以改为grater作为关系函数,这样值越大优先级越低(即小根堆)。
例如:
以下程序中pq1为大根堆(默认),pq2为小根堆(通过grater实现):
STL算法五
最新推荐文章于 2023-05-28 18:30:45 发布