Как отсортировать список с помощьюфункциональность? - PullRequest
2 голосов
/ 23 октября 2011

Я создал СПИСОК, используя sys / queue.h функциональность, которая содержит

struct stInside{
   int a;
   int b;
};

struct stOutside{
   struct stInside in;
   LIST_ENTRY(stOutside) outq;
};

LIST_HEAD(stOutsideHead, stOutside) head = LIST_HEAD_INITIALIZER(head);
struct stOutsideHead *headPtr;

struct stOutside *list;

for(int i=0; i < 4; i++){
   list = malloc(sizeof(struct stOutside));
   list->in.a = i;
   list->in.a = i;
   LIST_INSERT_HEAD(&head, list, outq);
}

Я бы хотел знать Как и что использовать для сортировки этого списка на основе поля a struct stInside. Есть ли какие-либо конкретные MACROS, которые могли бы сделать работу? Я видел

#define LIST_SORT_PROTOTYPE(name, type, field, cmp)             \
QHELPER_SORT_PROTOTYPE(LIST, name, type, field, cmp)

в sys / queue.h но я не понимаю, как это работает.

Большое спасибо за обмен и ваше время.

1 Ответ

1 голос
/ 23 октября 2011

Посмотрите на этот пример . Он использует SLIST, а не LIST, но идея та же.

Обычно вы используете LIST_SORT_PROTOTYPE(...) везде, где вы используете прототип функции сортировки, LIST_SORT_GENERATE(...) везде, где вы используете определение функции сортировки, и LIST_SORT(...) везде, где вы вызываете эту функцию.

...