#include #include struct mydata { RB_ENTRY(mydata) linkage; int payload; }; static int mydata_cmp(struct mydata *e1, struct mydata *e2) { return e2->payload - e1->payload; } int main(){ RB_HEAD(mydata_entries, mydata) head = RB_INITIALIZER(&head); RB_PROTOTYPE(mydata_entries, mydata, linkage, mydata_cmp); RB_GENERATE(mydata_entries, mydata, linkage, mydata_cmp); struct mydata *data; RB_INSERT(mydata_entries, head, data); struct mydata find; find.payload = 42; data = RB_FIND(mydata_entries, head, &find); RB_FOREACH(data, mydata_entries, head) printf("%d\n", data->payload); }