在我走得太远之前 - 这是一些功课的一部分。但是,我已经给了我最好的尝试,似乎无法弄清楚如何实现这一目标。
我得到一个堆结构,它包含一个指向比较函数的指针,用于比较堆的元素。但是,在特定情况下,需要反转给定的比较函数(示例中的strcmp)的值。如果a<b
,则不是返回负数,而是由堆调用的比较函数需要返回正数。
我无法修改任何使用堆结构的方法,也无法传入正确排序的方法。我可以创建另一个函数,然后给出一个指针。
答案 0 :(得分:1)
编写一个新函数并指示堆将其用作比较器。这个新函数需要访问现有的比较器指针;它将使用现有指针调用原始比较器,接收其返回值,“反转”它并将反转结果返回给它自己的调用者(即堆)。
例如,这是一个返回随机奇数整数的函数,并以一个返回完全随机整数的函数实现:
int totally_random() {
return 4; // chosen by fair die roll
}
int (*pointer)();
pointer = totally_random;
int odd_random() {
int result = *pointer(); // passed in through a global but alternatives exist
return result & 1 ? result : result + 1; // if even, add one to make odd
}