如何获取列表中对象的最小值(C++)

bak*_*kar 0 c++ search stl

我有一个问题要问.

所以,我有一个结构调用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的新手.我怎么解决这个问题?

我最诚挚的问候...

jua*_*nza 6

您可以将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)