优先队列
推荐大佬的博客:
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();
浙公网安备 33010602011771号