2

stl sort 関数を使用して絶対値に基づいて特定の配列をソートしようとしていますが、指定された順序でソートされていません:私が書いたコード:

int fun(int i,int j)
{
    if(abs(i)<abs(j))
        return j;
    else
        return i;
}

int main()
{
    int arr[100000];
    int i,n;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>arr[i];
    sort(arr,arr+n,fun);

    int diff=1000000ll;
    int x=0;
    int y,z;

    for i 0 to n
       cout<<arr[i];
    return 0;
}
4

2 に答える 2

5

一番使いやすい...

std::sort(arr, arr+n, [](int i, int j) { return abs(i) < abs(j); });

...そしてfun完全に捨てます。

(上記の「ラムダ」の代わりに)再利用可能な関数が本当に必要な場合は、ここで cppreference の例を見てください-具体的にはcustomLess.

于 2015-03-12T06:44:32.530 に答える
1
bool fun(int i,int j)
{
   return abs(i)<abs(j);
}

sort() には、いくつかの関数が bool 型を返す必要があり、int 関数を受け入れる必要があります。これは、0 を返す場合は false であると想定できるため、それ以外の場合は true です。true か true でないかだけを指定してから、sort() 関数にその仕事をさせてください。たとえば、上に示したように楽しみ関数を変更すると、sort() は絶対的な方法で昇順で出力します。

実際、私はあなたにアドバイスします。ほとんどの場合、これらのソート関数にはラムダを使用します。実際には、それらを自動変数に入れると、より簡単に呼び出すことができます.そのように、

auto func=[](int i, int j) { return abs(i) < abs(j); };
std::sort(arr, arr+n, func);

PS (言語については申し訳ありませんが、それは私の母国語ではありません。)

于 2015-03-12T07:04:53.540 に答える