我正在尝试对以下结构进行排序:
typedef struct thing {
char *text;
int count;
} *Item;
我正在创建一个额外的向量来对结构进行排序,如下所示:
Item items[nr_of_items];
... here is a loop to place the items inside the vector items ...
qsort(items, nr_of_items, sizeof(Item), cmpItem);
这是比较功能:
int cmpItem(const void *a, const void *b) {
const Item item_a = (const Item)a;
const Item item_b = (const Item)b;
/* Return 1 or -1 if members are not equal */
if (item_a->count > item_b->count) return 1;
if (item_a->count < item_b->count) return -1;
/* Return 1 or -1 if members are not equal */
if ( strcmp ( item_a->text, item_b->text ) > 0 ) return 1;
if ( strcmp ( item_a->text, item_b->text ) < 0 ) return -1;
/* Return 0 if both members are equal in both structures */
return 0;
}
正在创建矢量,但它没有被排序。难道我做错了什么?任何帮助表示赞赏。
答案 0 :(得分:3)
compar
的{{1}}回调函数接收两个指向被比较对象的参数,即指向qsort
数组中两个元素的指针。这意味着,items
和a
都指向b
,而不是Item
本身。你需要改变这个:
Item