从STL优先级队列中搜索/删除?

我的任务是为涉及解决“ 8难题”的作业编写A *搜索算法。

该算法的步骤之一是:

将所有扩展路径添加到Q。如果后代状态已经在Q中,则仅保留到状态Q的较短路径(其中Q是优先级队列(PQ))。

因此,如果状态相同但路径较短,我将需要搜索PQ。如果已经存在相同的状态,但路径更长,则需要从PQ中删除该状态。

我被指示使用STL PQ,而不是我自己的实现。我设法使用下面的方法来实现其他类型的搜索,以创建一个最小PQ-可以按需工作。

auto cmp = [](Puzzle* a, Puzzle* b) { 
    return a->getHCost() > b->getHCost();
};


std::priority_queue<Puzzle*, std::vector<Puzzle*>, decltype(cmp)> Q(cmp);           

我该如何扩展实现,以便...

  • 我可以执行暴力搜索-遍历STL PQ的每个元素?
  • 我可以通过索引删除STL PQ中某个元素吗? -如果适当,将元素“改组”为“向上”。
评论