我正在尝试使用STL中的sort函数,但它在执行期间给出了一个错误。
如果v小于e:
,则我的compare函数返回truebool 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元素。
有人可以帮我解决问题吗? 谢谢!!
答案 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];
}