21xrx.com
2024-11-08 21:22:41 Friday
登录
文章检索 我的文章 写文章
C++优先队列(priority_queue)的使用方法
2023-07-04 16:53:49 深夜i     --     --
C++ 优先队列 priority_queue 使用方法

C++中的优先队列(priority_queue)是一个非常实用的数据结构,它基于堆排序算法来实现,在处理一些需要按照一定规则排序的任务时,可以节省很多时间。这篇文章将介绍C++中优先队列的基本概念和使用方法。

优先队列是一种特殊的队列,它允许我们在插入元素的同时指定元素的优先级,元素的优先级越高,越先被取出来。

在C++中,优先队列是由 头文件中的priority_queue类实现的。它的定义方式如下:

priority_queue

其中Type是元素类型,Container是容器类型,Functional为元素比较方式,默认情况下采用“小根堆”的方式。

比如对于一个自定义的结构体Student,我们可以这样定义:

struct Student {

  string name;

  int score;

  bool operator<(const Student & other) const

     return score < other.score; //以分数为排序依据

};

priority_queue pq; //定义一个以学生分数为优先级的优先队列

在以上的定义方式中,可以看到我们重载了<运算符,这是为了让我们的结构体能够与C++的优先队列相对应。在比较元素的时候,我们会按照自定义的方式来进行排序,也就是说,分数越高的学生越先被取出。

在插入元素时,我们可以使用push()方法。例如:

Student s1 = 95;

Student s2 = "Tom";

Student s3 = 85;

pq.push(s1); //将Peter插入优先队列

pq.push(s2); //将Tom插入优先队列

pq.push(s3); //将Lisa插入优先队列

这时优先队列中的元素顺序为Peter,Lisa,Tom。

当我们需要取出队列中的元素时,可以使用pop()方法。例如:

Student s4 = pq.top(); //取出并删除队首元素

cout << "Name:" << s4.name << " Score:" << s4.score << endl;

以上的代码将会输出“Name:Peter Score:95”。

另外,我们还可以通过empty()方法来判断队列是否为空,size()方法来获取队列中元素的数量。

综上所述,C++中的优先队列是一个非常实用的数据结构,它可以根据我们自定义的规则来进行元素排序,并且在遍历队列的时候可以根据元素的优先级进行访问。感兴趣的读者可以自己尝试编写代码进行实践,以更好地理解优先队列的使用与优点。

  
  

评论区

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