混淆关于使用std :: less和std :: greater和std :: sort [英] confusion about using std::less and std::greater with std::sort

查看:164
本文介绍了混淆关于使用std :: less和std :: greater和std :: sort的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在C中,sort通常如下例所示实现:

In C, sort usually implements as in the following example:

#include <stdio.h>

void Sort( int* arr, int n, bool(*cmp)(int,int) )
{
    for( int i=0; i<n-1; i++ )
    {
        for( int j=i+1; j<n; j++ )
        {
            if( cmp(arr[i], arr[j]) )
                swap( arr[i], arr[j] );
        }
    }
}

int ascending( int a, int b ) { return a > b; }    // greater
int descending( int a, int b ) { return a < b; }   // less

void main()
{
    int arr[10] = { 1,3,5,7,9,2,4,6,8,10 };

    // ascending
    Sort( arr, 10, ascending );
    for( int i=0; i<10; i++ )
        printf( "%d ", arr[i] );

    printf( "\n" );


    // descending
    Sort( arr, 10, descending );
    for( int i=0; i<10; i++ )
        printf( "%d ", arr[i] );

    printf( "\n" );
}

所以我写了一些来源,如下面的例子,期望相同的结果: / p>

So I wrote some source as in the following example, expecting same result:

#include <iostream>
#include <algorithm>    // for sort
#include <functional>   // for less & greater
using namespace std;

bool gt( int a, int b ) { return a > b; }   // greater
bool ls( int a, int b ) { return a < b; }   // less

void main()
{
    int x[10] = { 1,3,5,7,9,2,4,6,8,10 };

    // ascending but descending
    sort( x, x+10, gt );
    for( int i=0; i<10; i++ )
        cout << x[i] << " ";

    cout << endl;

    // descending but ascending
    sort( x, x+10, ls );
    for( int i=0; i<10; i++ )
        cout << x[i] << " ";

    cout << endl;


    greater<int> g; // a > b
    less<int> l;    // a < b

    // ascending but descending
    sort( x, x+10, g );
    for( int i=0; i<10; i++ )
        cout << x[i] << " ";

    cout << endl;

    // descending but ascending
    sort( x, x+10, l );
    for( int i=0; i<10; i++ )
        cout << x[i] << " ";

    cout << endl;
}

但我的期望不正确。

为什么不在STL中排序如C中的排序

Why does not sort in STL work like sort in C?

推荐答案

std :: sort 的行为类似,因为它基于 strict的想法弱订单 (通常)按照< 运算符定义。

std::sort behaves like that because it's based on the idea of a strict weak ordering, which is (usually) defined in terms of the < operator.

至于你的问题;它目前似乎是我写了一个C函数,行为不同 std :: sort ,为什么是不同的?答案是:因为你写了一个不同的函数!

As to your question; it currently seems to be "I wrote a C function that behaves differently to std::sort. Why is it different?". The answer is: because you wrote a different function!

这篇关于混淆关于使用std :: less和std :: greater和std :: sort的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆