/ / як викликати рекурсивно функцію, яка має масив структур як параметр - c ++, масиви, рекурсія, структура, quicksort

як рекурсивно викликати функцію, яка має масив структур як параметр - c + +, масиви, рекурсія, структура, мікросхема

Я хочу сортувати масив структур за певним членом за допомогою quicksort. ось моя структура:

    struct points
{
int x,y,apart;
};

і функція швидкості:

 void quicksort(points* a,int points::*member,int left, int right)

{
int i=left, j=right, pivot=a[(i+j)/2].*member;
while(i<j)
{
while(a[i].*member<pivot)
i++;
while(a[j].*member>pivot)
j--;
if(i<=j)
{
points tmp=a[i];
a[i]=a[j];
a[j]=tmp;
i++;j--;
}
}
if(left<j)
quicksort(a,&points::*member,left,j);
if(i<right)
quicksort(a,&points::*member,i,right);
}

і проблема полягає в цих двох рядках коду:

if(left<j)
quicksort(a,&points::*member,left,j);
if(i<right)
quicksort(a,&points::*member,i,right);

Це дає помилку "s me: очікуваний некваліфікований id перед" * "токеном |

Я не знаю, коли я називаю це рекурсивно, як вказати члена, який я хочу сортувати за ... Якщо це має сенс, будь ласка, допоможіть мені. Спасибі

Відповіді:

2 для відповіді № 1

Простіше, ніж ти думаєш, як це

if(left<j)
quicksort(a,member,left,j);
if(i<right)
quicksort(a,member,i,right)

0 для відповіді № 2

Я припускаю, що ви хочете зробити щось на кшталт: "сортувати за x", "сортувати по y" як вхід до функції?

У цьому випадку ви не можете використовувати вказівник, оскільки це завжди вказує на певну змінну екземпляра.

Кращим способом у цьому випадку може бути використання функції передачі типу int get_sort_param(const struct points & p) і називайте це в алгоритмі сортування, коли ви відбираєте значення.