函数排序错误

时间:2011-04-18 16:35:10

标签: 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;
} 

这是电话:

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

矢量的大小是aprox 400元素。

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

2 个答案:

答案 0 :(得分: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;
} 

答案 1 :(得分:2)

您的比较运算符不会强制执行严格的弱排序。如果你能够使用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];
}