使用 STL C++ 对数字 USIG 绝对值进行排序

to sort the numbers usig absoluter value using stl c++

本文关键字:绝对值 排序 USIG 数字 STL C++ 使用      更新时间:2023-10-16

我正在尝试使用 stl 排序函数根据绝对值对给定数组进行排序,但它没有按指定顺序排序:我写的代码:

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;
}

最容易使用...

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

。并完全抛弃fun

如果你真的想要一个可重用的函数(而不是上面的"lambda"),请看一下这里的 cppreference 示例 - 特别是 customLess

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

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

实际上,

我建议您,主要为这些排序函数使用lambda,实际上,如果您将它们放在自动变量中,则可以更轻松地调用它们。诸如此类

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

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