ZBLOG

c++ priority_queue

在C++中,std::priority_queue 是一个容器适配器(Container Adapter),用于实现优先队列(Priority Queue)。它基于一个底层容器,并根据元素的比较函数进行排序。

以下是 std::priority_queue 的基本使用方法:

#include <iostream>
#include <queue>

int main() {
    // 创建一个默认的优先队列,存储 int 类型元素,默认从大到小排序
    std::priority_queue<int> myPriorityQueue;

    // 插入元素
    myPriorityQueue.push(30);
    myPriorityQueue.push(10);
    myPriorityQueue.push(20);

    // 访问队顶元素
    std::cout << "Top element: " << myPriorityQueue.top() << std::endl;

    // 删除队顶元素
    myPriorityQueue.pop();

    // 检查优先队列是否为空
    if (myPriorityQueue.empty()) {
        std::cout << "Priority queue is empty" << std::endl;
    } else {
        std::cout << "Priority queue is not empty" << std::endl;
    }

   return 0;
}

在上面的示例中,我们创建了一个 std::priority_queue<int> 对象,并插入了一些整数。默认情况下,优先队列会按照从大到小的顺序进行排序。通过调用 top() 函数可以获取队列的最高优先级元素(即队首元素),而 pop() 函数可以删除队首元素。最后,我们检查了优先队列是否为空。

如果想要自定义元素的排序方式,可以通过提供比较函数或函数对象来指定。例如,如果希望按照从小到大的顺序排序,则可以传递一个比较函数给 std::priority_queue 的第三个参数:

#include <iostream>
#include <queue>

// 自定义比较函数
struct Compare {
    bool operator()(const int& a, const int& b) {
        return a > b; // 从小到大排序
    }
};

int main() {
    std::priority_queue<int, std::vector<int>, Compare> myPriorityQueue;

    // 插入元素
    myPriorityQueue.push(30);
    myPriorityQueue.push(10);
    myPriorityQueue.push(20);

    // ...

   return 0;
}

在这个示例中,我们通过创建一个名为 Compare 的结构体,并重载了圆括号操作符(operator()),使得它可以像函数一样被调用。这样,我们就可以将其作为第三个参数传递给 std::priority_queue,并实现按照从小到大的顺序排序。

需要注意的是,在使用自定义比较函数时,请确保比较函数满足严格弱序(strict weak ordering)的条件,以避免产生不可预期的行为。

总之,std::priority_queue 是 C++ 中用于实现优先队列的容器适配器,能够方便地进行元素插入、访问和删除操作,并根据指定的排序方式进行排序。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14591

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?