我有一个问题要问.
所以,我有一个结构调用Node,如下所示:
struct Node
{
int xKoor, yKoor;
Node *parent;
char nodeId;
float G;
float H;
float F;
Node(int x, int y, int id, Node * par)
{
xKoor = x;
yKoor = y;
nodeId = id;
parent = 0;
}
Node(int x, int y, char id)
{
xKoor = x;
yKoor = y;
nodeId = id;
}
};
Run Code Online (Sandbox Code Playgroud)
我有包含此结构元素的列表:
list<Node*> OPEN;
Run Code Online (Sandbox Code Playgroud)
此列表的大小随时间而变化.
我需要做的是找到具有最小F值的Node对象,然后从列表中弹出该对象.
所以,我试着写一个函数,如下所示:
void enKucukFliNodeBul(list<Node*> OPEN)
{
list<Node*>::iterator it = OPEN.begin();
for(it = OPEN.begin(); it != OPEN.end(); it++)
{
if(it._Ptr->_Myval->F < it._Ptr->_Next->_Myval->F)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我被卡住了.我是STL的新手.我怎么解决这个问题?
我最诚挚的问候...
您可以将std :: min_element与适当的比较函数一起使用.
bool nodeComp(const Node* lhs, const Node* rhs) {
return lhs->F < rhs->F;
}
#include <algorithm> // for std::min_element
list<Node*>::iterator it = std::min_element(OPEN.begin(), OPEN.end(), nodeComp);
Run Code Online (Sandbox Code Playgroud)
这假设list<Node*>是std::list<Node*>,在这种情况下,您应该知道它std::list本身是一个链表.
其他有用的操作,根据您的意见:
从列表中删除最小值节点并将其删除:
OPEN.erase(it);
delete *it; //
Run Code Online (Sandbox Code Playgroud)
如果节点相互依赖,则可能需要执行其他操作.
对列表排序:
OPEN.sort(nodeComp);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |