【问题标题】:to sort the numbers usig absoluter value using stl c++使用stl c ++使用绝对值对数字进行排序
【发布时间】:2015-03-12 06:39:33
【问题描述】:

我正在尝试使用 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;
}

【问题讨论】:

  • 提示:fun 应该返回一个 bool

标签: c++ sorting stl absolute-value


【解决方案1】:

最容易使用...

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

...完全放弃fun

如果你真的想要一个可重用的函数(而不是上面的“lambda”),请查看cppreference example here - 特别是customLess

【讨论】:

  • 如果只有 C++11 和 C++14 就意味着 C++ 无处不在。
  • @Jagannath:幸运的是,大多数刚刚学习编程的人并没有因为一些公司纠结的构建和库可用性问题而被锁定,所以他们可以免费下载最新的编译器版本并使用 C+ +11。
【解决方案2】:
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(对不起语言,这不是我的母语。)

【讨论】:

  • 虽然慢了很多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2011-02-28
相关资源
最近更新 更多