学堂 学堂 学堂公众号手机端

在C++中,可以使用std::priority_queue类来实现优先队列。默认情况下,std::priority_queue是使用std::less来进行比较的,即元素的优先级由最大的元素排在队列前面。如果要自定义优先队列的排序规则,可以通过使用自定义的比较函数或者自定义的类来实现。 使用自定义的比较函数

lewis 1年前 (2024-04-16) 阅读数 16 #技术

在C++中,可以使用std::priority_queue类来实现优先队列。默认情况下,std::priority_queue是使用std::less来进行比较的,即元素的优先级由最大的元素排在队列前面。如果要自定义优先队列的排序规则,可以通过使用自定义的比较函数或者自定义的类来实现。

使用自定义的比较函数:

#include<iostream> #include<queue> structCustomCompare{ booloperator()(inta,intb){ //自定义排序规则,按照元素的绝对值大小进行排序 returnstd::abs(a)>std::abs(b); } }; intmain(){ std::priority_queue<int,std::vector<int>,CustomCompare>pq; pq.push(3); pq.push(-5); pq.push(2); pq.push(-1); while(!pq.empty()){ std::cout<<pq.top()<<""; pq.pop(); } return0; }

输出结果:


-53-12

使用自定义的类:

#include<iostream> #include<queue> classMyClass{ public: intvalue; MyClass(intv):value(v){} }; structCustomCompare{ booloperator()(constMyClass&a,constMyClass&b){ //自定义排序规则,按照元素的value进行排序 returna.value>b.value; } }; intmain(){ std::priority_queue<MyClass,std::vector<MyClass>,CustomCompare>pq; pq.push(MyClass(3)); pq.push(MyClass(-5)); pq.push(MyClass(2)); pq.push(MyClass(-1)); while(!pq.empty()){ std::cout<<pq.top().value<<""; pq.pop(); } return0; }

输出结果:

-5-123

通过定义自己的比较函数或类,就可以实现自定义的优先队列排序规则。

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门