如何使用迭代器比较结构列表?

时间:2014-05-05 15:51:09

标签: c++ list struct stl

我有一个结构。

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;
}

我正在使用此函数根据距离属性返回最小顶点

2 个答案:

答案 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; })); }