通过比较其成员值在向量中查找对象

时间:2013-08-30 15:30:38

标签: c++ c++11 vector stl

我正在研究C ++中的A *寻路算法。我有下面的简单代码,现在我需要找到最低F的对象。我知道如何通过迭代向量并手动比较它来做到这一点,但我认为可能有一些其他更简单的方法需要更少的代码。谢谢你的回答

struct Node
{
    int f;
};

void func()
{
    std::vector<Node> nodes;
    //fill nodes with some objects
    //now find Node object with smallest F
}

3 个答案:

答案 0 :(得分:2)

std::min_element和lambda比较器似乎最简洁。顺便说一句,使用普通向量似乎打败了使用快速搜索算法(如A *)的目的。在开发过程中没问题,但对于最终版本,您应该使用快速优先级队列,例如基于堆的std::priority_queue

答案 1 :(得分:0)

您可以保留一个temp int变量,并在此变量记录中vector的最小值索引。每次将新值推送到矢量时,都可以将它与矢量值与临时索引进行比较,并记录新的最小值索引。

答案 2 :(得分:0)

我在实施A *算法时遇到了同样的问题。

看看boost :: multi_index。它允许您拥有包含许多键的地图。 所以你可以同时拥有:用F“排序”节点(当其中一个键为F时)和按节点位置快速查找(当第二个键是'Node'时)A *中需要什么。

对于'F'作为键,您需要指定此键不是唯一的,因为可能有许多具有相同F值的项(因此对于此键,multi_index需要表现为std :: multimap)。否则,对于这种情况,multimap将表现得像地图,并且不会存储具有相同“F”的节点。

当使用multi_index时,您可以按键'F'取第一个项目,这将是具有最低'F'值的项目。 (AFAIR你可以指定排序顺序)