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 № 1Mais 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.