使用stl c ++使用绝对值对数字进行排序
to sort the numbers usig absoluter value using stl c++
我正在尝试使用 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 example here - 特别是 customLess
.
bool fun(int i,int j)
{
return abs(i)<abs(j);
}
sort() 需要一些具有 return bool 类型的函数并且它接受您的 int 函数,因为它可以假设如果它 return 0 它是假的,否则它是真的。你应该只给出它是真的还是假的,然后让 sort() 函数来完成它的工作。例如,如果你像我上面显示的那样改变你的有趣功能,那么 sort() 会以绝对方式按升序给你输出。
实际上我建议你,这些排序函数主要使用 lambdas,实际上如果你把它们放在自动变量中那么你可以更多地调用它们 easily.Like 那,
auto func=[](int i, int j) { return abs(i) < abs(j); };
std::sort(arr, arr+n, func);
PS(语言不好意思,不是我的母语。)
我正在尝试使用 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 example here - 特别是 customLess
.
bool fun(int i,int j)
{
return abs(i)<abs(j);
}
sort() 需要一些具有 return bool 类型的函数并且它接受您的 int 函数,因为它可以假设如果它 return 0 它是假的,否则它是真的。你应该只给出它是真的还是假的,然后让 sort() 函数来完成它的工作。例如,如果你像我上面显示的那样改变你的有趣功能,那么 sort() 会以绝对方式按升序给你输出。
实际上我建议你,这些排序函数主要使用 lambdas,实际上如果你把它们放在自动变量中那么你可以更多地调用它们 easily.Like 那,
auto func=[](int i, int j) { return abs(i) < abs(j); };
std::sort(arr, arr+n, func);
PS(语言不好意思,不是我的母语。)