C++ 8难题:按成员变量对包含指向对象的指针的STL堆/优先级队列进行排序
我正致力于实现一个最佳优先搜索算法来解决一个作业的8字谜问题。根据要求,必须使用标准模板库(STL)中的(最小)优先级队列或堆来实现 我理解,使用任一数据结构以最佳启发式成本(即最小成本)组织扩展的谜题状态都是有用的C++ 8难题:按成员变量对包含指向对象的指针的STL堆/优先级队列进行排序,c++,stl,sliding-tile-puzzle,C++,Stl,Sliding Tile Puzzle,我正致力于实现一个最佳优先搜索算法来解决一个作业的8字谜问题。根据要求,必须使用标准模板库(STL)中的(最小)优先级队列或堆来实现 我理解,使用任一数据结构以最佳启发式成本(即最小成本)组织扩展的谜题状态都是有用的 从3x3矩阵开始(使用阵列实现) 每个新的拼图状态(对象)都是使用以下方法创建的: Puzzle *next=(current->moveDown()); Puzzle *next=(current->moveRight()); Puzzle *next=(curre
从3x3矩阵开始(使用阵列实现) 每个新的拼图状态(对象)都是使用以下方法创建的:
Puzzle *next=(current->moveDown());
Puzzle *next=(current->moveRight());
Puzzle *next=(current->moveUp());
Puzzle *next=(current->moveRight());
我想。将(下一个)
推到(最小)优先级队列或堆(属于Puzzle*
),按照next->FCost
排序
一般来说,是否有一种方法可以使用这些STL数据结构中的任何一种来包含指向对象的指针—按特定于每个对象的成员变量(FCost)排序?是的,您可以为每个对象指定自定义比较函数
auto-cmp=[](拼图*a,拼图*b){
返回a->FCost>b->FCost;
};
std::优先级队列(cmp);
是的,您可以为
auto-cmp=[](拼图*a,拼图*b){
返回a->FCost>b->FCost;
};
std::优先级队列(cmp);
您可以使用带有优先级\u队列的自定义排序功能
。(您可以对所有有序集合执行此操作。)不相关,但我不明白为什么需要动态分配current。看见我建议只需拼图当前(初始,目标)
。当然,您的其他变量可能指向该堆栈变量,例如Puzzle*next=current.moveDown()代码>经验法则是,如果不立即将其包装到资源处理类中,不要编写new
,例如std::unique_pointer current=std::make_unique(new Puzzle(initial,goal))
。您可以使用带有优先级\u队列的自定义排序功能
。(您可以对所有有序集合执行此操作。)不相关,但我不明白为什么需要动态分配current。看见我建议只需拼图当前(初始,目标)
。当然,您的其他变量可能指向该堆栈变量,例如Puzzle*next=current.moveDown()代码>经验法则是,如果不立即将其包装到资源处理类中,不要编写new
,例如std::unique_pointer current=std::make_unique(new Puzzle(initial,goal))代码>。
Puzzle *next=(current->moveDown());
Puzzle *next=(current->moveRight());
Puzzle *next=(current->moveUp());
Puzzle *next=(current->moveRight());
auto cmp = [](Puzzle* a, Puzzle* b) {
return a->FCost > b->FCost;
};
std::priority_queue<Puzzle*, std::vector<Puzzle*>, decltype(cmp)> queue(cmp);