STL priority_queue.Неверная куча, когда все предметы равны - PullRequest
0 голосов
/ 03 ноября 2011

Я работаю над реализацией алгоритма поиска пути A * с использованием std::priority_queue, но он не работает должным образом.Я создал быстрый макет, чтобы увидеть, была ли проблема, поскольку очередь находится внутри класса.Не былоTt работал нормально.

У меня есть std::priority_queue, класса SNode, внутри класса AStarPrioQ.У узлов есть метод сортировки:

struct OverLoad
{
    bool operator() (const SNode& lhs, const SNode& rhs) const
    {
        return (lhs.f > rhs.f);
    }
};

priority_queue<SNode, vector<SNode>, OverLoad > wSet;

Я хочу отсортировать это в порядке возрастания на основе свойства SNode::f.f рассчитывается только с использованием SNode::CalcF(SNode goalPosition) непосредственно перед отправкой в ​​очередь.

Я добавляю это в очередь следующим образом:

    for (int i = 4; i < 8; i++)
    {
        tempPos = tempHead;

        if (ValidMove(&tempPos, i))
        {
            tempPos.pathLength += 14;
            tempPos.CalcF(goalPos);
            wSet.push(tempPos);
        }

    }

ValidMove генерирует перемещение на основев направлении i и возвращает true, если оно действительно.tempHead выталкивается из очереди в начале большего цикла while.

Я понятия не имею, почему я продолжаю получать ошибку Invalid Heap , хотя, похоже, она появляется, когда всяочередь имеет значения, равные f.

Надеюсь, я объяснил это достаточно хорошо.Если нет, я могу загрузить проект со всеми несвязанными файлами.

...