C++ priority_queue 的使用

1. priority_queue 的介绍

下面是 priority_queue 的介绍,来自于:priority_queue - C++ Reference (cplusplus.com) 的中文翻译,您可以尝试看看。

  1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。
  2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。
  3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue 提供一组特 定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。
  4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭 代器访问,并支持以下操作:
    • empty():检测容器是否为空。
    • size():返回容器中有效元素个数。
    • front():返回容器中第一个元素的引用。
    • push_back():在容器尾部插入元素

2. 大堆与小堆

前面的介绍部分已经指明,priority_queue 就是一个堆哈!既然是堆,自然分为大堆与小堆,而我们的 priority_queue 默认是一个大堆哈!

大堆:每个结点的值都大于或等于其左右孩子结点的值。

小堆:每个结点的值都小于或等于其左右孩子结点的值。

这是关于堆这种数据结构较为详细的讲解:C语言数据结构初阶(11)----堆_姬如祎的博客-CSDN博客

下面我也会做一个简单的复习的!

#include
#include
using namespace std;

int main()
{
	priority_queue heap;
	heap.push(1);
	heap.push(2);
	heap.push(3);
	heap.push(4);
	heap.push(5);
	heap.push(6);
	heap.push(7);
	return 0;
}

我们写了上面的代码,向一个大堆中插入了几个数字,那么堆在底层的物理结构与逻辑结构是什么样的呢?

C++ priority_queue 的使用_第1张图片

2.1 priority_queue 构建大堆与小堆

构建大堆:priority_queue heap

构建小堆:priority_queue, greater> heap

不用问为什么哈,到模拟实现 priority_queue 你就明白了。

3. priority_queue 接口使用

3.1 void push(const T& val)

这个函数是往堆中插入一个数据,然后经过向上调整算法,使得插入数据后的数组依然满足堆的逻辑结构。向上调整算法会在 priority_queue 的模拟实现中讲到。

3.2 void pop()

这个函数用来删除堆顶的元素。
C++ priority_queue 的使用_第2张图片

3.3 T& top()

这个函数可以用来获取堆顶的元素。

3.4 size_t size()

这个函数可以获取堆中数据的个数。

3.5 bool empty()

这个函数可以用来判断一个堆是否为空。

#include
#include
using namespace std;

int main()
{
    // 这是一个大堆
	priority_queue heap;
	heap.push(1);
	heap.push(2);
	heap.push(3);
	heap.push(4);
	heap.push(5);
	heap.push(6);
	heap.push(7);

	cout << heap.top() << endl; //输出:7
    
    cout << heap.size() << endl; //输出:7
    
    heap.pop();

    cout << heap.size() << endl; //输出:6
    
    cout << heap.empty() << endl; //输出:0
    
	return 0;
}

C++ priority_queue 的使用_第3张图片

你可能感兴趣的:(C++专题,c++,开发语言)