ich versucht, einen priority_queue zu erklären:Verweis auf nicht-statische Funktion muss aufgerufen werden,
std::priority_queue<int, std::vector<int>, std::function<bool(int, int)>> m_openList;
und die Art, wie ich es verwenden, zu initialisieren ist:
m_openList = std::priority_queue<int, std::vector<int>, std::function<bool(int,int)>>(keyCompare);
keyCompare ist eine Funktion:
bool PathPlanManager::keyCompare(int pointer1, int pointer2) {
return m_mapNode[pointer1] > m_mapNode[pointer2];}
Aber es scheint falsch. BTW, wie kann ich diese priority_queue löschen?
Nachdem ich versuchte, mein Code wie folgt war:
class PathPlanManager {
public:
class KeyCompare {
public:
KeyCompare(PathPlanManager& manager) : m_manager(&manager){}
bool operator() (int pointer1, int pointer2) {
return m_manager->m_nodeMap[pointer1] < m_manager->m_nodeMap[pointer2];
}
private:
PathPlanManager* m_manager;
};
void init() {
m_nodeMap.resize(100);
for (int i = 0; i < 100; i++) {
m_nodeMap[i] = 100 - i;
}
m_openList = std::priority_queue<int, std::vector<int>, KeyCompare>();
}
private:
vector<int> m_nodeMap;
std::priority_queue<int, std::vector<int>, KeyCompare> m_openList;
};
Und wenn ich es zu bauen versuchte, es ist ein Fehler, sagt kein passender Konstruktor zur Initialisierung von ‚value_compare‘ (auch bekannt als ‚PathPlanManager :: KeyCompare ‚)
PathPlan :: KeyCompare :: operator () ist eine Funktion, die zur PathPlan :: KeyCompare-Struktur gehört, daher kann sie nicht auf das private Mitglied von PathPlan zugreifen, da sie ein anderes Objekt sind. – Krapow
Nein, das Problem ist immer noch hier, wenn ich Vektor m_nodeMap als öffentlich setzen –
Ja, weil Sie in Betracht ziehen, dass KeyCompare direkten Zugriff auf PathPlan hat. Oder hat es nicht. Sie können eine statische Variable von KeyCompare festlegen, die Zugriff auf die Instanz von PathPlan hat, die Sie beispielsweise sortieren möchten. – Krapow