gpt4 book ai didi

c# - 了解 cmp(比较器函数)如何用作另一个函数的参数

转载 作者:行者123 更新时间:2023-11-30 19:03:11 24 4
gpt4 key购买 nike

这让我困惑了一段时间,不确定是否有人能理解我想要驾驶的东西

来源: https://www.oreilly.com/library/view/algorithms-in-a/9780596516246/ch04s06.html

我试图弄清楚将 cmp 作为参数传递到 buildHeap 到底会做什么

buildHeap (ar, cmp, n);

这本书似乎将 cmp 描述为比较器函数 ( How does the compare function in qsort work? ) 并考虑到这一点

static void buildHeap (void **ar, int(*cmp)(const void *,const void *), int n) {

我这样说对吗

int(*cmp)(const void *,const void *)

本质上,C 相当于 c# 中的委托(delegate)吗?

即将 cmp 传递到 buildHeap 会告诉 buildHeap 要实现什么函数,即比较器函数(符合以下签名:)

int(*cmp)(const void *,const void *)

是否有另一种方法可以教 buildHeap 在不传递 cmp 的情况下执行比较器功能?

最佳答案

buildHeapcmp 参数是一个函数指针,它指向一个带有两个 const void * 的函数返回 int 的参数。 buildHeap 可以使用此函数指针来调用相关函数来比较两个项目。

例如,如果您想比较两个整数,您可以实现如下函数:

int compare_int(const void *p1, const void *p2)
{
const int *a = p1;
const int *b = p2;

if (*a > *b) {
return -1;
} else if (*a < *b) {
return 1;
} else {
return 0;
}
}

然后将 compare_int 作为第二个参数传递给 buildHeap,即 buildHeap(arr,compare_int, n)。然后在 buildHeap 的某个地方,它可以根据需要调用此函数:

void buildHeap (void **ar, int(*cmp)(const void *,const void *), int n) {    
...
cmp(ar[x], ar[y]);
...
}

buildHeap 内部调用 cmp 实际上调用 compare_int

关于c# - 了解 cmp(比较器函数)如何用作另一个函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com