在std :: sort()中的自定义函数中,将>(大于)运算符交换为<(小于运算符)会导致分段错误?

时间:2014-07-13 19:41:35

标签: c++

我正在尝试实现kruskal的mst算法。我正在尝试根据每条边的权重的递增顺序对矢量边缘中的边进行排序。但是在对整个矢量进行排序之后,分段错误是发生。但如果我只是改变了 <(小于)签到 mycomp 函数中的>(大于),这样它就会按正确执行的顺序对它进行排序。为什么会发生这种情况?我想这里是strickt弱维序正在维持。谢谢。

#include<algorithm>
#include<iostream>
#include<vector>
#define all(container) container.begin(),container.end()

bool mycomp(const Edge* a,const Edge* b)
{return a->weight<b->weight;}

void kruskalmst(Graph* graph)
 {vector<Edge*> result;int i=0;
   sort(all(graph->edge),mycomp);

   }

1 个答案:

答案 0 :(得分:1)

for循环的条件:

 i<graph->e,result.size()<graph->v-1

使用逗号运算符。根据ISO标准5.18 pt.1:&#34;用逗号分隔的一对表达式从左到右进行评估;左表达式是废弃的值表达式&#34; 这意味着你循环,而不考虑i<graph->e,以便你可以超越你的迭代器的结尾。

是的,要解决这个问题,你也需要用逻辑运算符替换昏迷。如果graph->e是边数,则连接符应为&&