SimGrid。怎么写比较器?

时间:2016-05-29 22:34:50

标签: c compare simgrid

我有一个动态的主机阵列:

xbt_dynar_t dynar_host = xbt_dynar_new(sizeof(MSG_host_t), NULL);

每个主机都包含有关其在触发器中的速度的信息。 我想按照主人的速度对它进行排序。在文档中,我找到了函数xbt_dynar_sort。此函数接受两个参数:动态数组本身和比较器int_f_cpvoid_cpvoid_t compar_fn

任何建议或示例如何编写这个比较器?

1 个答案:

答案 0 :(得分:4)

此功能仅将标准qsort函数应用于dynar中存储的数据,因此您还应阅读libc documentationman pagethis 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中的建议相同。