Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用迭代器比较结构列表?_C++_List_Struct_Stl - Fatal编程技术网

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

C++ 如何使用迭代器比较结构列表?,c++,list,struct,stl,C++,List,Struct,Stl,我有一个结构 struct Vertex { list<Vertex> adj; unsigned short distance; // zero or infinity bool known; }; struct顶点 { 列表; 无符号短距离;//零或无穷大 布尔已知; }; 我想比较列表类型顶点元素中的距离;有什么想法吗 Vertex findMin(list<Vertex> &adj) { Ver

我有一个结构

struct Vertex
{
       list<Vertex> adj;
       unsigned short distance; // zero or infinity
       bool known;

};
struct顶点
{
列表;
无符号短距离;//零或无穷大
布尔已知;
};
我想比较列表类型顶点元素中的距离;有什么想法吗

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;
}
顶点findMin(列表和调整)
{
顶点最小值;
for(list::iterator it=adj.begin();it!=adj.end();it++){
//如果(它->距离<(调整下一步())->距离){
//}
返回最小值;
}
我使用此函数根据距离属性返回最小顶点
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;
}
{ if(adj.empty()) 抛出(0);//找不到空列表的最小值; list::const_迭代器bestVertex=adj.begin(); 无符号短距离=最佳顶点->距离; 对于(list::const_迭代器itr=adj.begin();itr!=adj.end();++itr) 如果(itr->距离<距离) { 最佳顶点=itr; minDistance=最佳顶点->距离; } 返回*最佳顶点; }
使用
std::min_元素
算法。以下是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); }
bool无距离(常数顶点&v1,常数顶点&v2)
{返回v1.distance
以下是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; })); }
顶点findMin(const std::list&adj) {return*std::min_元素(adj.begin(),adj.end(),[](常量顶点&v1,常量顶点&v2){return v1.distance
请提供示例或澄清您的问题如果您的
列表
std::list
,您的代码将导致未定义的行为。您不能用不完整的类型实例化std库容器。您可以简化此问题:给定一个
列表
,以最小的
距离返回元素。这就是您想要的吗你想做什么?