我需要在pryority_queue中查找元素,所以我创建了这个类:
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;}
}
};但我还需要传递一个用于对this.The函数进行排序的函数器:
class LessThanByHeuristic{
public:
LessThanByHeuristic(int dest,AStarHeuristic* heuristic,int mapWidth,bool reverse):
destTile(dest),heuristic(heuristic),tileMapWidth(mapWidth),reverse(reverse){}
bool operator()(const std::pair<double,int> lhs,const std::pair<double,int> rhs) const{
if(reverse){
return lhs.first + (*heuristic)(Vec2(lhs.second / tileMapWidth,lhs.second % tileMapWidth),
Vec2(destTile / tileMapWidth,destTile % tileMapWidth)) >
rhs.first + (*heuristic)(Vec2(rhs.second / tileMapWidth,rhs.second % tileMapWidth),
Vec2(destTile / tileMapWidth,destTile % tileMapWidth));
}
else{
return lhs.first + (*heuristic)(Vec2(lhs.second / tileMapWidth,lhs.second % tileMapWidth),
Vec2(destTile / tileMapWidth,destTile % tileMapWidth)) <
rhs.first + (*heuristic)(Vec2(rhs.second / tileMapWidth,rhs.second % tileMapWidth),
Vec2(destTile / tileMapWidth,destTile % tileMapWidth));
}
}
private:
int destTile;
AStarHeuristic* heuristic;
int tileMapWidth;
bool reverse;
};如何创建传递函数器及其参数的AStarPryorityQueue?
在没有继承的情况下,我这样做:
typedef std::priority_queue<std::pair<double,int>,std::vector<std::pair<double,int> >,LessThanByHeuristic> mypqType;然后:
mypqType processHeap(LessThanByHeuristic(destTile,heuristic,mapWidth,true));我现在怎么用我的AStarPryorityQueue类做到这一点呢?
发布于 2017-07-05 13:13:37
比较器是priority_queue类型的一部分,因此您需要在继承声明中指定它:
class AStarPryorityQueue : public std::priority_queue <std::pair<double,int>, std::vector<std::pair<double,int>>, LessThanByHeuristic>在构造函数中,由于优先级不是默认可构造的,因此需要调用std::LessThanByHeuristic -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}}
...编辑:我不能百分之百确定这实际上是你想要做的--对于A*的实现,你通常需要一个可寻址的优先级队列,在这个队列中你可以减少PQ中已经存在的条目的键。
https://stackoverflow.com/questions/44917283
复制相似问题