21xrx.com
2024-11-22 09:33:27 Friday
登录
文章检索 我的文章 写文章
C++中的优先队列实现
2023-06-22 12:18:52 深夜i     --     --
C++ 优先队列 实现

C++是一种强大的编程语言,在数据结构方面也提供了很多不同的实现方案。其中,优先队列是一种很重要的数据结构,非常适用于需要动态维护最大或最小值的场景。在C++中,我们可以使用标准库中提供的优先队列来快速实现这一数据结构。

优先队列基本概念

在开始讲解C++中优先队列的实现之前,我们先来复习一下优先队列的基本概念。优先队列是一种特殊的队列,它的出队顺序与普通队列不同,而是按照元素的优先级高低来进行出队。具体来说,优先队列可以维护以下三种操作:

1. 插入元素:将新元素插入队列中。

2. 弹出元素:将队列中优先级最高的元素弹出并返回。

3. 访问元素:得到当前队列中优先级最高的元素。

C++中的优先队列实现

在C++中,我们可以通过STL中提供的priority_queue类来实现优先队列。这个类是一个模板类,我们需要指定存储元素的类型,以及比较元素大小的方式。在默认情况下,优先队列以大根堆的形式存储元素,也就是说元素按照从大到小的顺序排列。

下面的代码演示了如何使用priority_queue类来实现一个简单的优先队列:


#include <iostream>

#include <queue>

using namespace std;

int main() {

  priority_queue<int> pq; //定义一个存储int类型元素的优先队列

  pq.push(3);

  pq.push(5);

  pq.push(1);

  cout << pq.top() << endl; //输出1

  pq.pop();

  cout << pq.top() << endl; //输出3

  return 0;

}

在这个代码中,我们定义了一个存储int类型元素的优先队列,并向其中插入了三个元素。之后,我们输出队列中的最小值,并弹出这个最小值。这里的pq.top()操作可以获取当前队列中优先级最高的元素,而pq.pop()则将它从队列中弹出。

改变元素排序方式

除了默认的大根堆排序方式,我们还可以通过指定一个比较函数,来改变元素排序的方式。比如,如果我们想要按照从小到大的顺序排列元素,可以写出如下的代码:


#include <iostream>

#include <queue>

using namespace std;

int main() {

  priority_queue<int, vector<int>, greater<int>> pq; //按照从小到大的顺序排列

  pq.push(3);

  pq.push(5);

  pq.push(1);

  cout << pq.top() << endl; //输出1

  pq.pop();

  cout << pq.top() << endl; //输出3

  return 0;

}

在这个代码中,我们指定了一个比较函数greater ,来表示元素应该按照从小到大的顺序排列。

总结

在C++中,我们可以简单地使用priority_queue类来实现优先队列的功能。这个类支持插入、弹出和访问操作,以及对元素排序方式的自定义。在实际开发中,优先队列可以帮助我们轻松地实现各种最值相关的算法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复