我有一个动态的主机数组:
xbt_dynar_t dynar_host = xbt_dynar_new(sizeof(MSG_host_t), NULL);每个主机都包含有关其在触发器中的速度的信息。我想按他们主人的速度来分类。在文档中,我找到了函数排序。该函数接受两个参数:动态数组本身和比较器int_f_cpvoid_cpvoid_t compar_fn。
有什么建议或例子可以写这个比较器吗?
发布于 2016-05-29 22:59:03
此函数仅将标准的qsort函数应用于存储在dynar中的数据,因此您还应该阅读libc文档、手册页或本教程以获得更多信息。
因此,您应该编写一个类似于以下内容的函数:
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)对你的痢疾进行排序。
注意,函数返回线的实际比较有点复杂。这是一种以数值稳定的方式服从函数语义的方法(A< B返回-1,A==B返回0,A>B返回1)。正如相关的libc文件中所建议的那样。
https://stackoverflow.com/questions/37515612
复制相似问题