函数排序错误

Error in function sort

本文关键字:错误 排序 函数      更新时间:2023-10-16

我试图使用STL中的排序函数,但它在执行过程中给了我一个错误。

如果v小于e,比较函数返回true:

bool smallerThan(VertexEntry &v, VertexEntry &e) {
   if(v.v[0] < e.v[0]) return true;
   else if(v.v[1] < e.v[1]) return true;
   else if(v.v[2] < e.v[2]) return true;
   return false;
} 

下面是调用:

sort(vertices.begin(),vertices.end(),smallerThan);

vector的大小约为400个元素。

有人能帮我解决我的问题吗?谢谢你! !

你的比较函数是不正确的——它没有强制执行严格的弱排序。

使用

:

bool smallerThan(VertexEntry const & v, VertexEntry const & e) {
   if (v.v[0] < e.v[0]) 
     return true;
   else if(v.v[0] > e.v[0]) 
     return false;
   else if(v.v[1] < e.v[1]) 
     return true;
   else if(v.v[1] > e.v[1])
     return false;
   else if(v.v[2] < e.v[2])
     return true;
   return false;
} 

比较运算符没有强制执行严格的弱排序。如果你能够使用boost,我看到的一个技巧是将你的对象绑定到boost::tuple并使用其严格的弱operator<

如果你需要自己写,像这样的东西应该可以工作:

bool smallerThan(const VertexEntry &v, const VertexEntry &e)
{
   if(v.v[0] != e.v[0]) return v.v[0] < e.v[0];
   else if(v.v[1] != e.v[1]) return v.v[1] != e.v[1];
   else return v.v[2] < e.v[2];
}