std::bsearch
Определено в заголовочном файле <cstdlib>
|
||
extern "C" void* bsearch( const void* key, const void* ptr, std::size_t count, std::size_t size, int (*comp)(const void*, const void*) ); |
||
extern "C++" void* bsearch( const void* key, const void* ptr, std::size_t count, std::size_t size, int (*comp)(const void*, const void*) ); |
||
Находит элемент, равный элементу, заданному по указателю key
, в массиве, на который указывает ptr
. Этот массив должен содержать count
элементов, размером в size
байт каждый, и должен быть поделён элементом, доступным по указателю key
так, чтобы все элементы, которые меньше чем равные ему, находились раньше в массиве, а те, которые больше их, после них. Полностью отсортированный массив удовлетворяет этим требованиям. Элементы сравниваются, используя функцию, предоставленную по указателю comp
.
Поведение не определено, если массив не был поделён относительно элемента для поиска в порядке возрастания, по тому же правилу, которое использует comp
.
Если массив содержит несколько одинаковых элементов, определённых функцией comp
, и равных элементу для поиска, то будет возвращён любой из таких элементов.
Содержание |
[править] Параметры
key | - | Указатель на элемент для поиска |
ptr | - | Указатель на массив, в котором будет искаться элемент |
count | - | Количество элементов в массиве |
size | - | Размер в байтах каждого элемента в массиве |
comp | - | Функция, которая будет сравнивать объекты. Она возвращает отрицательное целое число, если первый аргумент этой функции меньше второго, положительное число, если первый аргумент больше второго, и наконец если они равны, то она возвращает 0.
Определение сравнивающей функции должно быть следующим: int cmp(const void *a, const void *b); Эта функция не должна модифицировать переданные ей объекты. |
[править] Возвращаемое значение
Возвращается указатель на найденный элемент или нулевой указатель, если элемент не был найден.
[править] Примечание
Несмотря на имя, стандарт С++, Си или POSIX не требует, чтобы эта функция реализовывала алгоритм "бинарного поиска" или давала каких-то гарантий по стабильности и степени сложности алгоритма.
Две перегрузки, предоставленные стандартной библиотекой C++ различны, так как типы параметра comp
различны (языковое связывание является частью типа)
[править] Пример
#include <cstdlib> #include <iostream> int compare(const void *ap, const void *bp) { const int *a = (int *) ap; const int *b = (int *) bp; if(*a < *b) return -1; else if(*a > *b) return 1; else return 0; } int main(int argc, char **argv) { const int ARR_SIZE = 8; int arr[ARR_SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8 }; int key1 = 4; int *p1 = (int *) std::bsearch(&key1, arr, ARR_SIZE, sizeof(arr[0]), compare); if(p1) std::cout << "значение " << key1 << " найдено в позиции " << (p1 - arr) << '\n'; else std::cout << "значение " << key1 << " не найдено\n"; int key2 = 9; int *p2 = (int *) std::bsearch(&key2, arr, ARR_SIZE, sizeof(arr[0]), compare); if(p2) std::cout << "значение " << key2 << " найдено в позиции " << (p2 - arr) << '\n'; else std::cout << "значение " << key2 << " не найдено\n"; }
Вывод:
значение 4 найдено в позиции 3 значение 9 не найдено
[править] See also
Сортирует диапазон элементов любого типа (функция) | |
возвращает набор элементов для конкретного ключа Оригинал: returns range of elements matching a specific key Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон функции) | |
C documentation for bsearch
|