我有一个std :: list图形边缘,我想根据它们的目标outdegree然后它们的indegree对边缘进行排序。但我得到了无效运算符的例外<在我的比较功能中,下面是我的代码。我的列表包含指向边缘的指针 edge将目标节点作为其成员。
bool compareEdges(const Edge *e1,const Edge *e2){
if(e1->destination->outdegree < e2->destination->outdegree){
return true;
}
else if(e1->destination->outdegree > e2->destination->outdegree){
return false;
}
else if(e1->destination->indegree > e2->destination->indegree){
return false;
}
return true;
}
这是对sort函数的调用。
currentNode->edgeList.sort(compareEdges);
请帮我删除此例外。
由于
答案 0 :(得分:32)
当两个相关字段相等时,比较器返回true
。这是无效的,因此很可能是sort
实现通过断言检测到的内容。
你应该将一个“小于”的谓词传递给sort
:正式是一个“严格的弱秩序”。其他任何东西都是未定义的行为。在这种情况下,你似乎很幸运,并且由于比较不一致,实现检测到它已陷入不可能的情况。