C++排序算法

3
#include <iostream>
#include <array>
#include <algorithm>
using namespace std;
class Test
{
private:
    int value;
public:
    Test()
    {
 
    }
    Test(int _value)
    {
        value = _value;
    }
    bool operator<(Test&);
 
};
bool Test::operator<(Test& rValue) {
    return this->value < rValue.value;
}
int main()
{
    Test* arr = new Test[950];
    arr[0] = Test(5);
    arr[1] = Test(10);
    arr[2] = Test(7);
    arr[3] = Test(3);
    arr[4] = Test(10);
    sort(arr, arr + 5, [](Test& a, Test& b) { return a < b ? false : true; });
}

直到出现相同等级值的对象,排序算法才能完美运行。

另外,我知道使用排序和反转的其他方法。

我正在使用 Visual Studio 2019。

错误: Debug Assertion Failed! Expression: invalid comparator


3
请提供完整的错误信息。 - mascai
此外,默认的 Test 对象将具有未初始化的 value 字段。 - cigien
你想按降序排序吗? - Eduardo Pascual Aseff
1
问题在于您传递给排序函数的比较器函数对于相等的元素返回true。 - Eduardo Pascual Aseff
你不能对 operator< 取反来进行排序,因为 !(a < b) 等同于 a >= b - Slava
1个回答

6
一个排序比较器必须对于相等的项目返回false,而你的返回了true,请尝试使用以下方法。
sort(arr, arr + 5, [](Test& a, Test& b) { return b < a; });

@BerianidzeLuka 在发布模式下不会执行调试断言。 - Wilf Rosenbaum
你说排序比较器必须对相等的项返回false,但这个问题在发布中如何解决?操作符保持不变,仍然是<。 - Berianidze Luka
如果您对相等的项目不返回false,则您的程序具有未定义的行为。工作是未定义行为的一个可能结果,但显然您不能依赖于它。即使错误没有表现出来,程序仍然是不正确的。 - john

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接