最近做一些算法需要用到对自定义数据结构进行排序,为了省事,使用了std::sort,使用的前提必须要要重载自定义数据结构的“<操作符”,数据结构自定义如下:
class Object { public: int index; double p[3]; inline bool operator<(const Object &obj) const { if(p[0] < obj.p[0]) return true; if(p[1] < obj.p[1]) return true; if(p[2] < obj.p[2]) return true; return false; } };
然后调用std::sort进行排序,代码如下:
std::vector<Object> objVec;
std::sort(objVec.begin(), objVec.end());
在VS2013编译器下编译时提示错误:Expression : invalid operator <
解决方法为修改重载的operator<函数如下:
inline bool operator<(const Object &obj) const { return p[0] != obj.p[0]?( p[0] < obj.p[0]):(p[1] != obj.p[1])?(p[1] < obj.p[1]):(p[0] < obj.p[0]); }
编译通过,排序结果正确,但是具体原因现在还没有想明白。