今、いろいろな例を見てきましたが、その意味がわかりません。
これが私の構造です
typedef struct profile{
char gender[1];
double soc;
. . .
} PROFILE;
ここで、socは、ソートする社会保障番号です。
比較機能が必要なのはわかっていますが、必要なものを思いつく方法はわかりません。
Cの構造体の配列にqsort
を使用する例を次に示します
/* qsort example */
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int price;
int id;
} order;
order list[6];
int i = 0;
int compare (const void * a, const void * b)
{
order *orderA = (order *)a;
order *orderB = (order *)b;
return ( orderB->price - orderA->price );
}
int main ()
{
srand ( time(NULL) );
printf("Before sorting\n");
for(i=0; i<6; i++){
list[i].price = Rand()%10;
list[i].id = i;
printf ("Order id = %d Price = %d \n",list[i].id, list[i].price);
}
printf("AFTER sorting\n");
int n;
qsort (list, 6, sizeof(order), compare);
for (n=0; n<6; n++)
printf ("Order id = %d Price = %d \n",list[n].id, list[n].price);
return 0;
}
それが役に立てば幸い
カテリーナ・ディミトリス
(すべてpitsiに関して)
厳密バージョンのコンパレータは、2つの定数voidポインタを取ります。
int compare(const void *v1, const void *v2)
{
const struct profile *p1 = v1;
const struct profile *p2 = v2;
if (p1->gender > p2->gender)
return(+1);
else if (p1->gender < p2->gender)
return(-1);
else if (p1->soc > p2->soc)
return(+1);
else if (p1->soc < p2->soc)
return(-1);
else
return(0);
}
これは、まず性別フィールドを比較し、次にsocフィールドを比較します。これは、マルチパート比較を処理する方法です。