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



我正在尝试实现kruskal的mst算法。我试图根据每条边权重的递增顺序对向量边中的边进行排序。但在对完整向量进行排序后,出现了分割错误。但是如果我改变<(小于)符号到>(大于)在我的mycomp函数中,这样它将按降序排序,它正在正确执行。为什么会这样?我认为这里保持了严格的弱排序。谢谢你。

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

for循环的条件:

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

使用逗号操作符。根据ISO标准5.18 pt.1:"用逗号分隔的一对表达式从左到右求值;左边的表达式是一个被丢弃的值表达式"。
这意味着你循环,不考虑如果i<graph->e,所以你可以超越你的迭代器的结束。

是的,要解决这个问题,您还需要用逻辑运算符替换逗号。若graph->e为边数,则连接器应为&&

最新更新