如何递归调用一个具有结构数组作为参数的函数

时间:2013-09-27 15:34:30

标签: c++ arrays recursion struct quicksort

我想使用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

我不知道何时以递归方式调用它如何指定我要按其排序的成员... 如果有任何意义请帮助我。 感谢

2 个答案:

答案 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)的函数,并在排序值时在排序算法中调用它。