Из cppreference,

Для выполнения поиска функция выполняет серию вызовов функции compar с ключом в качестве первого аргумента и элементами массива, на который указывает на который указывает base, в качестве второго аргумента.

Для заданного массива int arr[] = {1, 2, 3, 4, 5, 6, 7} при поиске элемента 6 необходимо передать функцию обратного вызова в bsearch.Нужно ли, чтобы моя функция int compar (const void* pkey, const void* pelem); могла вернуть один из следующих трех случаев:

  • возврат < 0
  • return > 0
  • возврат 0

Достаточно ли реализовать функцию compar только для равенства (например, возвращать 0, если искомое значение равно текущему элементу)?

Cătălina S&#238;rbu

Ответов: 1

Ответы (1)

Ваша функция сравнения должна возвращать правильное возвращаемое значение для всех возможных входов. Более того, вектор должен быть отсортирован последовательно с функцией сравнения: если значение a идет перед b в векторе, то compar(&a, &b) должно быть меньше или равно 0. bsearch не проверяет это, но если это не так, то bsearch, вероятно, вернет неверный результат. Или даже хуже.

В любом случае, невозможно реализовать функцию, которая только иногда возвращает значение, если вы это имели в виду. Если возвращаемое значение функции не используется, функция должна что-то возвращать. В языке C это требование не соблюдается, но если вы его проигнорируете, в вашей программе появится Неопределенное поведение, а это значит, что произойдут плохие вещи.

2022 WebDevInsider