无效的运算符<在排序std :: list时

时间:2011-12-16 09:35:25

标签: c++ list exception sorting stl

我有一个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);

请帮我删除此例外。

enter image description here

由于

1 个答案:

答案 0 :(得分:32)

当两个相关字段相等时,比较器返回true。这是无效的,因此很可能是sort实现通过断言检测到的内容。

你应该将一个“小于”的谓词传递给sort:正式是一个“严格的弱秩序”。其他任何东西都是未定义的行为。在这种情况下,你似乎很幸运,并且由于比较不一致,实现检测到它已陷入不可能的情况。