C++ 在从std::priority\u队列继承的类中使用自定义比较器

C++ 在从std::priority\u队列继承的类中使用自定义比较器,c++,inheritance,priority-queue,functor,C++,Inheritance,Priority Queue,Functor,我需要在pryority_队列中查找元素,因此创建了类: template < typename T > class AStarPryorityQueue : public std::priority_queue < T, std::vector < T > >{ public: bool find(const T& value) { auto it = std::find(this->c.begin(), this

我需要在pryority_队列中查找元素,因此创建了类:

template < typename T >

class AStarPryorityQueue : public std::priority_queue < T, std::vector < T > >{ 

public:
    bool find(const T& value) {
        auto it = std::find(this->c.begin(), this->c.end(), value);
        if (it != this->c.end()){return true;}
        else {return false;}
    }
};

现在如何使用AstarProrityQueue类执行此操作?

比较器是
优先级队列
类型的一部分,因此您需要在继承声明中指定它:

class AStarPryorityQueue : public std::priority_queue <std::pair<double,int>, std::vector<std::pair<double,int>>, LessThanByHeuristic>
类astarprityqueue:public std::priority\u队列
在构造函数中,由于LessThanByHeuristic不是默认可构造的,因此需要调用std::priority queue的构造函数:

AStarPryorityQueue(int destTile, AStarHeuristic* heuristic, int tileMapWidth, bool reverse) : std::priority_queue <std::pair<double,int>,std::vector < std::pair<double,int>>,LessThanByHeuristic>{LessThanByHeuristic{destTile, heuristic, tileMapWidth, reverse}}
...
astarprerityqueue(int destile,astarheristic*启发式,int tileMapWidth,bool reverse):std::priority_queue,LessThanByHeuristic>{LessThanByHeuristic{destile,heuristic,tileMapWidth,reverse}
...

编辑:我不能100%确定这是您真正想要做的-对于A*的实现,您通常需要一个可寻址优先级队列,在这里您可以减少PQ中已经存在的条目的密钥。

std::priority\u queue
,作为所有STL容器和适配器,并不意味着要从中继承(事实上,它没有一个
virtual
析构函数)。
mypqType processHeap(LessThanByHeuristic(destTile,heuristic,mapWidth,true));
class AStarPryorityQueue : public std::priority_queue <std::pair<double,int>, std::vector<std::pair<double,int>>, LessThanByHeuristic>
AStarPryorityQueue(int destTile, AStarHeuristic* heuristic, int tileMapWidth, bool reverse) : std::priority_queue <std::pair<double,int>,std::vector < std::pair<double,int>>,LessThanByHeuristic>{LessThanByHeuristic{destTile, heuristic, tileMapWidth, reverse}}
...