0

クイックソートを使用して、構造体の配列を特定のメンバーでソートしたいと考えています。ここに私の構造体があります:

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

問題は次の 2 行のコードにあります。

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

それは私にエラーを与えます:「*」トークンの前に非修飾IDが必要です|

再帰的に呼び出すときに、並べ替えたいメンバーを指定する方法がわかりません...意味がある場合は、助けてください。ありがとう

4

2 に答える 2

2

このように、あなたが思っているよりも簡単です

if(left<j)
   quicksort(a,member,left,j);
if(i<right)
   quicksort(a,member,i,right)
于 2013-09-27T15:35:51.627 に答える
0

関数への入力として、「xでソート」、「yでソート」のようなことをしたいと思いますか?

その場合、ポインターは常に特定のインスタンス変数を指すため、ポインターを使用することはできません。

この場合のより良い方法は、次のような関数を渡し、int get_sort_param(const struct points & p)ソートされた値である場合はいつでもソートアルゴリズムでこれを呼び出すことです。

于 2013-09-27T15:39:53.423 に答える