std::sort 错误"Expression : invalid operator <"
解决:std::sort的比较函数,切记仅使用小于或大于,不要使用小于等于或大于等于。即所谓的“ strict weak ordering”,也就是说,如果a==b,则返回的应该是false,如果返回的是true,则会出上面的错
这个问题是标准库sort实现导致的
参考https://blog.csdn.net/qq_35097289/article/details/104648601
class testOperator { public: int value=0; int value2=0; void setV(int v) { value = v; } void setV2(int v2) { value2 = v2; } bool operator <=(const testOperator& other) const { if (other < *this) { return false; } return true; } bool operator <(const testOperator& other) const { if (this->value == other.value) { return this->value2 < other.value2; } return this->value < other.value; } }; bool compareTestOperator(const testOperator& t1, const testOperator& t2) { return t1 <= t2; //不能使用<=,如果容器元素中有相等的,就会导致crash } int main() { { testOperator t1; testOperator t2; t2.setV(10);//当前没问题,注释掉这一句就会crash std::vector < testOperator > vec = {t1, t2}; std::sort(vec.begin(), vec.end(),compareTestOperator); std::cout << vec.size() << std::endl; }
纯属记录程序人生,如有差错,欢迎指正,轻喷
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通