Я реализую алгоритм поиска A *, но продолжаю сталкиваться с проблемами с очередью приоритетов.Я реализовал собственный компаратор для очереди приоритетов в соответствии с этой статьей
Это соответствующий код:
class CNode;
struct CompareNode : public binary_function<CNode*, CNode*, bool> {
bool operator()(const CNode* lhs, const CNode* rhs) const {
return lhs->m_costFromStart+lhs->m_heuristic > rhs->m_costFromStart+rhs->m_heuristic;
}
};
bool AStarSearch(CNode* start, CNode* end) {
priority_queue<CNode*, vector<CNode*>, CompareNode> open;
...
}
Стек вызовов:
std::_Debug_heap ...
std::pop_heap ...
std::priority_queue<CNode *,std::vector<CNode *,std::allocator<CNode *> >,CompareNode>::pop()
AStarSearch(CNode * start=0x0f9a23b8, CNode * end=0x0f9a24e8)
Тогда использовалось больше, так как для этого алгоритма мне требовалась минимальная куча.Реализация, кажется, работает нормально, и проблема исчезает, когда она запускается в режиме выпуска, но очередь приоритетов иногда выдает ошибки подтверждения «Недопустимая куча» в режиме отладки, когда приоритетная очередь имеет значение pop () ed.
Я не знаком с двоичной функцией в stl, но проблема, похоже, связана с компаратором.Удаление компаратора или изменение знака на меньшее устраняет ошибку, но это дало бы мне максимальную кучу.Я что-то упускаю?