我有一个动态的主机阵列:
xbt_dynar_t dynar_host = xbt_dynar_new(sizeof(MSG_host_t), NULL);
每个主机都包含有关其在触发器中的速度的信息。
我想按照主人的速度对它进行排序。在文档中,我找到了函数xbt_dynar_sort。此函数接受两个参数:动态数组本身和比较器int_f_cpvoid_cpvoid_t compar_fn
。
任何建议或示例如何编写这个比较器?
答案 0 :(得分:4)
此功能仅将标准qsort
函数应用于dynar中存储的数据,因此您还应阅读libc documentation,man page或this tutorial以获取更多信息
所以你应该写一个类似于以下的函数:
int mycmp(void *a,void*b)
{
MSG_host_t hostA = *(MSG_host_t*)a;
MSG_host_t hostB = *(MSG_host_t*)b;
double valA = MSG_host_get_speed(hostA);
double valB = MSG_host_get_speed(hostB)
return (valA > valB) - (valA < valB);
}
然后,请致电xbt_dynar_sort(dynar, mycmp)
对您的dynar进行排序。
请注意,函数返回行的实际比较有点复杂。这是一种服从语义的方法(如果A&lt; B则返回-1,如果A == B则返回0,如果A> B则返回1)以数值稳定的方式。这与相关documentation of libc中的建议相同。