我是靠谱客的博主 超帅铃铛,最近开发中收集的这篇文章主要介绍优先队列和结构体重载(详解),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

优先队列是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列往往用来实现。

优先队列至少需要支持下述操作:

  • 插入带优先级的元素(insert_with_priority)
  • 取出具有最高优先级的元素(pull_highest_priority_element)
  • 查看最高优先级的元素(peek):O(1) 时间复杂度

其它可选的操作:

  • 检查优先级高的一批元素
  • 清空优先队列
  • 批插入一批元素
  • 合并多个优先队列
  • 调整一个元素的优先级

优先队列的定义和基本操作

priority_queue<node> q;
q.empty()          如果队列为空,则返回true,否则返回false
 
q.size()           返回队列中元素的个数
 
q.pop()            删除队首元素,但不返回其值
 
q.top()            返回具有最高优先级的元素值,但不删除该元素
 
q.push()       在基于优先级的适当位置插入新元素

可以看出,优先队列的操作和基本的队列的操作稍有区别。

优先级问题

默认优先级

通过<操作符可知在整数中元素大的优先级高。

自定义优先级

struct node
{
    int value;
    //按照value的值大的优先
    friend bool operator<(node x, node y) {
        return x.value < y.value;
    }
    node(int value) : value(value){}
};
struct node
{
    int value;
    //默认的是最大顶堆,所以value属于top
    bool operator < (node x) const {
            return x.value < value;      //从小到大排序
        }
    node(int value) : value(value){}
};

个人理解:第一种是x相当于队列头,返回的是比队列头大的值。

第二种,value是队列头,返回的是比队列头小的值,所以是从小到大排序。

/*
* @Author: wfy
* @Date:   2020-03-10 10:30:44
* @Last Modified by:   wfy
* @Last Modified time: 2020-03-10 10:30:44
*/
#include <bits/stdc++.h>
using namespace std;
struct node
{
    int value;
    //按照value的值大的优先
    friend bool operator<(node x, node y) {
        return x.value < y.value;
    }
    node(int value) : value(value){}
};
int main(int argc, char const *argv[])
{
    priority_queue<node> p;
    p.push(node(1));
    p.push(node(0));
    p.push(node(3));
    node a = p.top();
    printf("%d", a.value);
    p.pop();
    printf("%d", p.top().value);
    return 0;
}

 

/*
* @Author: wfy
* @Date:   2020-03-10 10:30:44
* @Last Modified by:   wfy
* @Last Modified time: 2020-03-10 10:30:44
*/
#include <bits/stdc++.h>
using namespace std;
struct node
{
    int value;
    //默认的是最大顶堆,所以value属于top
    bool operator < (node x) const {
            return x.value < value;      //从小到大排序
        }
    node(int value) : value(value){}
};
int main(int argc, char const *argv[])
{
    priority_queue<node> p;
    p.push(node(1));
    p.push(node(0));
    p.push(node(3));
    node a = p.top();
    printf("%d", a.value);
    p.pop();
    printf("%d", p.top().value);
    return 0;
}

 

最后

以上就是超帅铃铛为你收集整理的优先队列和结构体重载(详解)的全部内容,希望文章能够帮你解决优先队列和结构体重载(详解)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部