/ / como chamar recursivamente uma função que tem uma matriz de structs como parâmetro - c ++, arrays, recursion, struct, quicksort

como chamar recursivamente uma função que tem uma matriz de structs como parâmetro - c ++, arrays, recursion, struct, quicksort

Eu quero classificar uma matriz de estruturas por um membro específico usando quicksort. aqui está minha estrutura:

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

e a função quicksort:

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

e o problema está nessas duas linhas de código:

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

Dá-me o erro: esperado unqualified-id antes de "*" token |

Eu não sei quando eu chamo de recursivamente como especificar o membro que eu quero classificá-lo por ... Se fizer algum sentido, por favor me ajude. obrigado

Respostas:

2 para resposta № 1

Mais fácil do que você pensa, assim

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

0 para resposta № 2

Eu suponho que você quer fazer algo como: "ordenar por x", "ordenar por y" como uma entrada para a função?

Nesse caso, você não pode usar um ponteiro, pois isso sempre aponta para uma variável de instância específica.

A melhor maneira, neste caso, pode ser usar passar uma função como int get_sort_param(const struct points & p) e chamar isso no seu algoritmo de ordenação sempre que você for o valor classificado.