我有一个结构。
struct Vertex
{
list<Vertex> adj;
unsigned short distance; // zero or infinity
bool known;
};
我想比较列表类型顶点的元素中的距离;任何想法???
Vertex findMin(list<Vertex> &adj)
{
Vertex min;
for(list<Vertex>::iterator it = adj.begin(); it != adj.end(); it++){
// if(it->distance < (adj.next())->distance){
//}
return min;
}
我正在使用此函数根据距离属性返回最小顶点
答案 0 :(得分:1)
Vertex findMin(const list<Vertex> &adj)
{
if(adj.empty())
throw(0); // cannot find minimum of an empty list;
list<Vertex>::const_iterator bestVertex = adj.begin();
unsigned short minDistance = bestVertex->distance;
for(list<Vertex>::const_iterator itr=adj.begin(); itr!=adj.end(); ++itr)
if(itr->distance < minDistance)
{
bestVertex = itr;
minDistance = bestVertex->distance;
}
return *bestVertex;
}
答案 1 :(得分:1)
使用std::min_element
算法。这是pre-C ++ 11代码:
bool isDistanceLess(const Vertex& v1, const Vertex& v2)
{ return v1.distance < v2.distance; }
Vertex findMin(const std::list<Vertex>& adj)
{ return *std::min_element(adj.begin(), adj.end(), isDistanceLess); }
这是C ++ 11版本:
Vertex findMin(const std::list<Vertex>& adj)
{ return *std::min_element(adj.begin(), adj.end(), [](const Vertex& v1, const Vertex& v2) { return v1.distance < v2.distance; })); }