bsearch 的 compar 回调函数只需要实现相等?
The compar callback function for bsearch needs only implementation of equality?
来自 cppreference,
To perform the search, the function performs a series of calls to
compar with key as first argument and elements of the array pointed to
by base as second argument.
对于给定的数组 int arr[] = {1, 2, 3, 4, 5, 6, 7}
,搜索元素 6
您需要将回调函数传递给 bsearch
。我的 int compar (const void* pkey, const void* pelem);
函数是否需要能够return以下三种情况之一:
- return < 0
- return > 0
- return 0
或者仅仅为了相等而实现 compar
函数就足够了(例如 return 0 当搜索值等于当前元素时)?
您的比较函数必须 return 所有可能输入的正确 return 值。此外,向量必须与比较函数一致地排序:如果值 a
在向量中出现在 b
之前,则 compar(&a, &b)
必须小于或等于 0。 bsearch
不检查,但如果不是这种情况,bsearch
可能会 return 错误的结果。或者更糟。
无论如何,不可能实现仅有时 return 是一个值的函数,如果这就是您的意思。除非不使用函数的 return 值,否则函数必须 return 一些东西。 C 并没有强制执行这个要求,但是如果你忽略它,你的程序就会有未定义的行为,这意味着会发生不好的事情。
来自 cppreference,
To perform the search, the function performs a series of calls to compar with key as first argument and elements of the array pointed to by base as second argument.
对于给定的数组 int arr[] = {1, 2, 3, 4, 5, 6, 7}
,搜索元素 6
您需要将回调函数传递给 bsearch
。我的 int compar (const void* pkey, const void* pelem);
函数是否需要能够return以下三种情况之一:
- return < 0
- return > 0
- return 0
或者仅仅为了相等而实现 compar
函数就足够了(例如 return 0 当搜索值等于当前元素时)?
您的比较函数必须 return 所有可能输入的正确 return 值。此外,向量必须与比较函数一致地排序:如果值 a
在向量中出现在 b
之前,则 compar(&a, &b)
必须小于或等于 0。 bsearch
不检查,但如果不是这种情况,bsearch
可能会 return 错误的结果。或者更糟。
无论如何,不可能实现仅有时 return 是一个值的函数,如果这就是您的意思。除非不使用函数的 return 值,否则函数必须 return 一些东西。 C 并没有强制执行这个要求,但是如果你忽略它,你的程序就会有未定义的行为,这意味着会发生不好的事情。