I nedded haben Elemente in einem pryority_queue zu finden, so habe ich die Klasse:einen benutzerdefinierten Komparator in einer Klasse, die von std :: erbt 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;}
}
};
Aber ich brauche auch einen Funktor übergeben verwendet Art this.The funtor ist:
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;
};
Wie erstelle ich einen AStarPryorityQueue die Funktors und seine Argumente zu übergeben?
Ohne Vererbung ich tun:
typedef std::priority_queue<std::pair<double,int>,std::vector<std::pair<double,int> >,LessThanByHeuristic> mypqType;
und dann:
mypqType processHeap(LessThanByHeuristic(destTile,heuristic,mapWidth,true));
Wie kann ich es jetzt tun mit meiner AStarPryorityQueue Klasse?
'std :: priority_queue', wie alle STL-Container und Adapter, soll nicht von geerbt werden (in Wirklichkeit hat es keinen' virtuellen' Destruktor). –