ベクトルから最小値を抽出しています。
ベクトル=[0、inf、inf、inf];と言います。
ExtractSmallest(vector) = 0;
次に、vector = [0、1、inf、inf];
しかし今、私たちはすでに0を見てきました。したがって、
ExtractSmallest(vector) = 1;
私はこれをコードで表現しますnodes.erase(nodes.begin() + smallestPosition);
しかし、私は今、消去が非常に悪いことに気づきました。ベクトルを消去せずにこれを達成する方法はありますか?すでに見たものをスキップするだけですか?
Node* CGraph::ExtractSmallest(vector<Node*>& nodes)
{
int size = nodes.size();
if (size == 0) return NULL;
int smallestPosition = 0;
Node* smallest = nodes.at(0);
for (int i=1; i<size; ++i)
{
Node* current = nodes.at(i);
if (current->distanceFromStart <
smallest->distanceFromStart)
{
smallest = current;
smallestPosition = i;
}
}
nodes.erase(nodes.begin() + smallestPosition);
return smallest;
}