模拟网格。比较器怎么写?

SimGrid. How to write comparator?

我有一个主机的动态数组:

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

每个主机都包含有关其速度的信息(以触发器为单位)。 我想按他们的主人的速度排序。在文档中我找到了函数 xbt_dynar_sort。这个函数接受两个参数:动态数组本身和比较器int_f_cpvoid_cpvoid_t compar_fn

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

此函数仅将标准 qsort 函数应用于存储在 dynar 中的数据,因此您还应阅读 libc documentation, the man page or 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 进行排序。

注意函数的return行实际比较有点复杂。这是一种以数值稳定的方式服从函数语义(return -1 如果 A < B,如果 A==B 则为 0,如果 A > B 则为 1)。这是相关 documentation of libc.

中的建议