比较c ++ stl sort中的函数

时间:2014-12-11 05:00:30

标签: c++ c++11

我需要从给定的随机有序元素中获得不增加的顺序。经过大量工作,我意识到以下代码产生不同的输出。为什么代码产生不同的输出?

bool cmp(int i,int j)
{
    if(i<j)
        return 0;
    return 1;
}
bool cmp(int i,int j)
{
   return i>j;
}

3 个答案:

答案 0 :(得分:2)

第一个功能应该是

bool cmp(int i,int j)
{
    if(i>j)
        return 1;
    return 0;
}

获得等效输出。

或者使用以下功能:

bool cmp(int i,int j)
{
    return -1 * i < -1 * j;
}

答案 1 :(得分:2)

首先要做的事情:

当两个函数具有相同的输入时,它们会产生不同的结果。所以cmp(1,1)会产生不同的结果。

未定义的行为:

鉴于此cmp()函数:

bool cmp(int i,int j) {
    if(i<j)
        return 0;
    return 1;
}

以下陈述将产生未定义的行为

std::vector<int> x;
std::sort(x.begin(), x.end(), cmp);

传递给std::sort的比较器需要实现Compare。其中一个要求是cmp(1,1)将返回false。您的代码返回true。

答案 2 :(得分:2)

你的第一个功能相当于&#34;不低于&#34;即&#34;大于或等于&#34;当你想要的是&#34;更大&#34;。另外,鉴于这是C ++ 11,为什么不这样做:

std::sort(v.begin(), v.end(), std::greater<int>());