让我们说我有一个名为MyClass
的类,每个MyClass对象都有一个名为xVal
的方法。我想要的是一个MyClass
对象的优先级队列,该对象按MyClass.xVal()
的升序排序
到目前为止,我有这个:
priority_queue<MyClass, vector<MyClass>, greater<MyClass>> queue;
当然,它并没有达到我的期望。我遵守,但是对我的对象使用了一些随机排序。如果有人可以指出我在做什么错,将不胜感激。
谢谢。
答案 0 :(得分:2)
CPP Reference link到优先级队列中,可以将优先级队列定义为:
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
在这里T=MyClass
和Container=std::vector<MyClass>
。剩下的唯一内容是Compare
,如上所述,可以使用Lambda或Functors来实现。我将同时显示:
假设类定义如下,以xVal()
方法的返回值作为排序键:
struct MyClass{
int count;
int key;
int xVal() { return count; };
};
使用Lambdas
// Lambda skeleton: [capture preferences](arguments){ body }
auto cmp = [](MyClass left, MyClass right) {return left.xVal() > right.xVal();};
std::priority_queue<MyClass, std::vector<MyClass>, decltype(cmp)> queue(cmp);
使用函子
struct CmpFunctor{
bool operator()(MyClass left, MyClass right) const {
return left.xVal() > right.xVal();
}
};
auto cmp = CmpFunctor()
std::priority_queue<MyClass, std::vector<MyClass>, decltype(cmp)> queue(cmp);
这是显示正在运行的代码的link。