0
我nedded找到在pryority_queue元素繼承的類,所以我創建的類:使用自定義的比較中,從性病:: priority_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;}
}
};
但我也需要通過使用一個仿函數排序這一信息。Funtor是:
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類?
'std :: priority_queue',因爲所有的STL容器和適配器都不能被繼承(事實上它沒有'virtual'析構函數)。 –