在写优先队列式分支限界法解装载问题时发现priority_queue中元素为指针类型时,如果用less 关键字自己重载的 < 和 > 会失效。
然后google加百度终于解决了。。
样例:
希望实现:
priority_queue<MaxHeapQNode *, vector<MaxHeapQNode *>, less<MaxHeapQNode *> > q;
然而却发现并没有从大到小排序。
然后改成:
priority_queue<MaxHeapQNode *, vector<MaxHeapQNode *>, less<MaxHeapQNode > > q;
却有报错。
解决方法: 不用greater和less关键词,改用cmp
class MaxHeapQNode
{
public:
MaxHeapQNode *parent;
int lchild;
int weight;
int lev;
};
struct cmp
{
bool operator()(MaxHeapQNode *&a, MaxHeapQNode *&b) const
{
return a->weight < b->weight;
}
};
priority_queue<MaxHeapQNode *, vector<MaxHeapQNode *>, cmp > q; // 大顶堆