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完全放弃。

如果您真的想要一个可重用的函数(而不是上面的“lambda”),请查看此处的 cppreference 示例- 特别是customLess.

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

sort() 需要一些函数返回 bool 类型并且它接受你的 int 函数,因为它可以假设如果它返回 0 则为假,否则为真。你应该给它它是真的还是假的,然后让 sort() 函数来完成它的工作。例如,如果你改变了我上面显示的有趣的功能,那么 sort() 以绝对的方式以升序为你提供输出。

实际上我建议你,这些排序函数主要使用 lambdas,实际上如果你把它们放在自动变量中,那么你可以更容易地调用它们。像这样,

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

PS(对不起语言,这不是我的母语。)

于 2015-03-12T07:04:53.540 回答