优先队列

推荐大佬的博客:

https://blog.csdn.net/c20182030/article/details/70757660

https://blog.csdn.net/weixin_36888577/article/details/79937886

以下是简单说明(个人理解仅供参考)

优先队列是c++STL里面队列容器的一个特殊容器,就是具有排序的功能的队列,是用数据结构堆来是实现的。一开始可以不管各种细节,直接当成容器去用,当成板子去套。

既然是排序,就要有排序的规则。一般我们用struct结构体把排序的规则和要存的数据放一起存放,很少有要存的数据就是排序规则的时候,那种情况太简单了也用不着用队列。比如我们要按照学号来排名字,而输入的顺序是乱的,还可能会有人转学要加人或者减人。

struct node {
    string str;    //要排的字符串
//      int data;或是要排的数
    int id;       //这就是一会的排序规则
};

然后就要写排序规则了。熟悉的cmp就又和大家见面了。优先队列的自定义排序规则有很多种写法,我推荐的是一脉相承的“比较类”写法。(其实我也不知道比较类是啥,各种写法可以看别人的博客)在struct cmp里面写一个运算符重载。

struct cmp {
    bool operator () (const node &a, const node &b){  //以后对于函数里不会更改的变量可以这么写const <type> &a
        return a.id > b.id;                           //这样就是升序排列,即把小的放前面。
    }
};

然后就搞定个了,然后声明定义一个优先队列的容器变量就行了,priority_queue <node, vector<node>, cmp> q;

之后就像普通队列那样用就行,所有的成员函数都是一样的。记得访问顶元素是top();

posted @ 2020-02-17 23:53  jindianli  阅读(144)  评论(0)    收藏  举报