我正在从向量中提取最小值。
说向量 = [0, inf, inf, inf];
ExtractSmallest(vector) = 0;
然后向量 = [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;
}