/ / wie man rekursiv eine Funktion aufruft, die ein Array von Strukturen als Parameter hat - C ++, Arrays, Rekursion, Struktur, Quicksort

wie man rekursiv eine Funktion aufruft, die ein Array von Strukturen als Parameter hat - C ++, Arrays, Rekursion, Struktur, Quicksort

Ich möchte ein Array von Strukturen durch ein bestimmtes Mitglied mit Quicksort sortieren. Hier ist meine Struktur:

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

und die Quicksort-Funktion:

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

und das Problem liegt in diesen zwei Codezeilen:

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

Es gibt mir den Fehler: erwartete unqualifizierte ID vor "*" Token |

Ich weiß nicht, wann ich es rekursiv anrufe, wie ich das Mitglied angeben soll, nach dem ich es sortieren möchte ... Wenn es Sinn macht, bitte hilf mir. Vielen Dank

Antworten:

2 für die Antwort № 1

Leichter als Sie denken, so

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

0 für die Antwort № 2

Ich nehme an, Sie möchten etwas tun wie: "Sortieren nach x", "Sortieren nach y" als Eingabe für die Funktion?

In diesem Fall können Sie keinen Zeiger verwenden, der immer auf eine bestimmte Instanzvariable zeigt.

Der bessere Weg wäre in diesem Fall die Verwendung einer Funktion wie int get_sort_param(const struct points & p) und rufen Sie dies in Ihrem Sortieralgorithmus auf, wenn Sie der sortierte Wert sind.