我想使用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);
它给了我错误:'*'标记|
之前的预期unqualified-id我不知道何时以递归方式调用它如何指定我要按其排序的成员... 如果有任何意义请帮助我。 感谢
答案 0 :(得分:2)
比你想象的更容易,比如
if(left<j)
quicksort(a,member,left,j);
if(i<right)
quicksort(a,member,i,right)
答案 1 :(得分:0)
我假设您要执行以下操作:“按x排序”,“按y排序”作为函数的输入?
在这种情况下,您不能使用指针,因为它始终指向特定的实例变量。
在这种情况下,更好的方法可能是使用传递类似int get_sort_param(const struct points & p)
的函数,并在排序值时在排序算法中调用它。