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

In a custom function in std::sort() the interchanging of >(greater than) operator to <(less than operator) can cause segmentation fault?

本文关键字:运算符 交换 错误 小于 分段 lt gt 自定义函数 大于 std sort      更新时间:2023-10-16

我正在尝试实现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为边数,则连接器应为&&