混淆关于使用std :: less和std :: greater和std :: sort [英] confusion about using std::less and std::greater with 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屋!