C++中指针的静态优先级队列

e3bfsja2  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(144)

我有一个类foo,在这个类中,我需要一个静态优先级队列栏来保存指向一定数量的foo对象的指针,foo对象还有一个私有成员buzz,用来保存比较时对象的权重。
到目前为止,我已经尝试了以下方法:

class foo{
private:
    // some stuff
    int buzz;
public:
    // some more stuffs
    static bool compare (const foo* l, const foo* r){
        return l->buzz < r->buzz;
    }
    static std::priority_queue<foo*, std::vector<foo*>, foo::compare> bar;
};

但我得到这个错误的铿锵声:
模板类型参数的模板参数必须是类型
我读了thisthis,但不能让我的头周围如何做,或我做错了什么。

mhd8tkvw

mhd8tkvw1#

正如您在std::priority_queue documentation中所看到的,第三个模板参数Compare是:
提供严格弱排序的比较类型。
函数指针(如您所使用的)不能用于比较类型。
提供比较类型的一种方法是通过具有**opertor()**的类(最好是const类):

#include <queue>

class foo {
private:
    int buzz;
public:
    // Our compare type:
    struct Compare
    {
        bool operator()(const foo* l, const foo* r) const 
                       { return l->buzz < r->buzz; }
    };

    //--------------------------------------------------vvvvvvvvvvvv-----
    static std::priority_queue<foo*, std::vector<foo*>, foo::Compare> bar;
};

相关问题