Для сортировки чисел, используя абсолютное значение, используя 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;
}

2 ответа

Решение
bool fun(int i,int j)
{
   return abs(i)<abs(j);
}

Функция sort() нуждается в некоторой функции с возвращаемым типом bool, и она принимает вашу функцию int, потому что она может предположить, что если она вернет 0, то она будет ложной, в противном случае это правда. Вы должны просто сказать, правда это или нет, а затем позволить функции sort() выполнить свою работу. Например, если вы измените свою забавную функцию, как я покажу выше, то sort() даст вам вывод в порядке возрастания в абсолютном порядке.

На самом деле я советую вам, в основном, использовать лямбда-выражения для этих функций сортировки, на самом деле, если вы поместите их в авто-переменные, то вы сможете вызывать их проще.

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

PS(простите за язык, это не мой родной язык.)

Самый простой в использовании...

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

... и канава fun в целом.

Если вы действительно хотите использовать повторно используемую функцию (вместо "лямбда-выражения" выше), взгляните на пример cppreference здесь - конкретно customLess,

Другие вопросы по тегам