C++中的STL比较函数使用“,对于ints,该运算符返回中

C++中的STL比较函数使用“,对于ints,该运算符返回中,c++,stl,C++,Stl,我必须在sort函数中实现第三个参数cmp,用于按降序对整数数组进行排序 问题是这个定义不正确 bool cmp (int a, int b) { if(a<b) return false; else return true; } 请注意,我声称第一个代码不能正常工作,因为当我使用第二个代码时,我对Codechef问题的解决方案被接受,但第一个代码不能 如果两个值相等,则STL比较函数必须返回false。如果std::sort提供的比较函数

我必须在sort函数中实现第三个参数cmp,用于按降序对整数数组进行排序

问题是这个定义不正确

bool cmp (int a, int b)
{
    if(a<b)
        return false;
    else
        return true;
}

请注意,我声称第一个代码不能正常工作,因为当我使用第二个代码时,我对Codechef问题的解决方案被接受,但第一个代码不能

如果两个值相等,则STL比较函数必须返回false。

如果std::sort提供的比较函数的第一个参数位于其第二个参数之前,则必须返回true,否则返回false

因此,对于降序,您应该使用>运算符>,对于ints,该运算符返回中的补码

最后一个论点:

comp-比较功能对象,即满足

康帕,b

建立具有以下属性的严格弱排序关系:

对于所有a,compa,a==假

这就是为什么

if(a<=b) 
    return false;
工作,而

if(a<b)
    return false;
不会。std::sort的compare函数返回一个值,该值指示作为第一个参数传递的元素在其定义的特定严格弱顺序中是否被视为在第二个参数之前

这里是严格弱序的定义

严格弱序是比较两个谓词的二进制谓词 对象,如果第一个在第二个之前,则返回true。这 谓词必须满足 严格弱序。具体要求如下所述,但具体要求是什么 它们的大致意思是,严格的弱序必须以这种方式运行 小于的行为:

如果a小于b,则b不小于a, 如果a小于b且b小于c,则a小于c, 等等 根据比较功能的不同:

建立严格的弱序关系

因此,函数comp必须定义严格的弱序。根据定义,它必须满足三个条件:

1 compx,对于所有x不可弯曲条件,x为假

2如果compx,那么y!compx,y不对称条件

3如果compx,y和compy,z,那么compx,z传递性条件


很容易看出,cmp函数的第一个示例不满足不可伸缩性条件,因此它不能作为std::sort的comp参数传递。同样清楚的是,第二个cmp示例中的x,y是满足所有三个条件的数字,因此它可以作为comp参数传递给std::sort。

也可以使用,但我想找出当前示例中的错误是什么。非常清楚。如果简化为返回a>=b,则违反要求的情况会变得更清楚;并返回a>b;第一条规定,每个数字都应该在其自身之前进行排序。
if(a<=b) 
    return false;
if(a<b)
    return false;