函数排序错误

Sar*_*ara 1 c++ sorting

我正在尝试使用STL中的sort函数,但它在执行期间给出了一个错误.

如果v小于e,我的compare函数返回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;
} 
Run Code Online (Sandbox Code Playgroud)

这是电话:

sort(vertices.begin(),vertices.end(),smallerThan);
Run Code Online (Sandbox Code Playgroud)

矢量的大小是aprox 400元素.

有人可以帮我解决我的问题吗?谢谢!!

Eri*_*rik 9

您的比较函数不正确 - 它不会强制执行严格的弱排序.

用这个:

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;
} 
Run Code Online (Sandbox Code Playgroud)

  • @Potatoswatter:我认为最好是实现你需要的运算符,可能是`operator <`.对于模板肯定,对于特定的类,我更喜欢上述. (2认同)
  • @Erik:标准将"LessThanComparable"定义为模板的通用要求(17.6.3.1),这就是定义排序关系的方式.重载一个类的`std :: less`或定义`operator>`可以让你无论标准库还是任何编写良好的第三方库都无处可寻. (2认同)
  • @Erik:今天有一个功能或类,明天可能有十几个.它被称为可维护性.简而言之,通过重新排列参数来消除函数是设计的胜利. (2认同)