21xrx.com
2024-12-22 21:48:24 Sunday
登录
文章检索 我的文章 写文章
C++优先队列使用介绍
2023-07-13 16:09:39 深夜i     --     --
C++ 优先队列 操作 实现 应用

C++中的优先队列(priority_queue)是一种非常实用的数据结构,它能够在O(log n)的时间复杂度内实现插入和删除操作,并且能够自动按照指定的优先级顺序排序。在实际编程中,我们常常需要根据某种特定的规则来排序,而优先队列则可以很好地解决这个问题。

首先需要说明的是,C++中的优先队列有一些默认设置,其中默认情况下优先级较高的元素会排在队列的前面,而默认的比较函数是用less 比较器,也就是从小到大排序。例如,如果我们将以下元素push进优先队列里:

priority_queue q;

q.push(3);

q.push(1);

q.push(4);

那么队列中的元素就会按照从大到小的顺序排列,即4,3,1。这个比较器也可以自定义,例如如果我们需要从小到大排序,可以这么写:

priority_queue , greater > q;

接下来就是优先队列常用的几个操作:

1. push:插入一个元素

q.push(5);

2. top:返回队首元素

int top_elem = q.top();

3. pop:删除队首元素

q.pop();

4. empty:判断队列是否为空

if(q.empty())

  cout<<"队列为空"<

另外需要注意的一点是,当我们需要自定义比较器时,比较器对象必须是一个可调用对象,也就是在调用时应该像函数一样使用。以下是比较器inversion的示例代码:

struct inversion{

  bool operator()(int a, int b)

    return a > b;

};

priority_queue , inversion> q;

q.push(3);

q.push(1);

q.push(4);

通过上述示例,我们可以看到,在定义了一个自定义比较器之后,我们可以在使用push等操作的时候调用这个比较器,实现按照从小到大排序。通过使用优先队列,我们能够快速、方便地实现按照规则排序的需求,为日常编程工作提供了更多的可能性。

  
  

评论区

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