std::bsearch
cppreference.net에서
| 헤더 <cstdlib>
|
||
void* bsearch( const void* key, const void* ptr, std::size_t count,
std::size_t size, /* c-compare-pred */* comp );
|
에 정의됨 (1) | |
void* bsearch( const void* key, const void* ptr, std::size_t count,
std::size_t size, /* compare-pred */* comp );
|
(2) | |
void* bsearch( void* key, const void* ptr, std::size_t count,
std::size_t size, /* c-compare-pred */* comp );
|
(3) | (C++26 이후) |
void* bsearch( void* key, const void* ptr, std::size_t count,
std::size_t size, /* compare-pred */* comp );
|
(4) | (C++26 이후) |
extern "C" using /* c-compare-pred */ = int(const void*, const void*);
|
(설명 전용*) | |
extern "C++" using /* compare-pred */ = int(const void*, const void*);
|
(설명 전용*) | |
key이 가리키는 요소와 동일한 요소를 ptr이 가리키는 배열에서 찾습니다. 배열에는 count개의 요소가 있으며 각 요소의 크기는 size바이트이고, key이 가리키는 객체에 대해 분할되어 있어야 합니다. 즉, key 객체보다 작게 비교되는 모든 요소는 같게 비교되는 요소보다 먼저 나타나야 하고, 그 다음으로 key 객체보다 크게 비교되는 요소가 나타나야 합니다. 완전히 정렬된 배열은 이러한 요구 사항을 충족합니다. 요소는 comp이 가리키는 함수를 사용하여 비교됩니다.
배열이 key에 대해 comp가 사용하는 동일한 기준에 따라 오름차순으로 이미 분할되지 않은 경우, 동작은 정의되지 않습니다.
배열에 comp이 검색된 요소와 같다고 표시할 여러 요소가 포함된 경우, 함수가 결과로 어떤 요소를 반환할지 명시되지 않습니다.
매개변수
| key | - | 검색할 요소를 가리키는 포인터 |
| ptr | - | 검사할 배열을 가리키는 포인터 |
| count | - | 배열의 요소 개수 |
| size | - | 배열의 각 요소 크기 (바이트) |
| comp | - | 첫 번째 인수가 두 번째 인수보다 작으면 음의 정수 값을, 첫 번째 인수가 두 번째 인수보다 크면 양의 정수 값을 반환하며, 인수가 동등하면 0을 반환하는 비교 함수입니다.key이 첫 번째 인수로 전달되고, 배열의 요소가 두 번째 인수로 전달됩니다.비교 함수의 서명은 다음과 동등해야 합니다:
함수는 전달된 객체를 수정해서는 안 되며, 배열 내 위치에 관계없이 동일한 객체에 대해 호출될 때 일관된 결과를 반환해야 합니다. |
반환값
발견된 요소를 가리키는 포인터 또는 요소를 찾지 못한 경우 널 포인터.
비고
이름에도 불구하고 C나 POSIX 표준 모두 이 함수가 이진 탐색을 사용하여 구현되거나 복잡성에 대한 어떤 보장도 요구하지 않습니다.
C++ 표준 라이브러리에서 제공하는 두 오버로드는 매개변수 comp의 유형이 다르기 때문에 구별됩니다 (언어 링크는 해당 유형의 일부입니다).
예제
이 코드 실행하기
#include <array>
#include <cstdlib>
#include <iostream>
template<typename T>
int compare(const void *a, const void *b)
{
const auto &arg1 = *(static_cast<const T*>(a));
const auto &arg2 = *(static_cast<const T*>(b));
const auto cmp = arg1 <=> arg2;
return cmp < 0 ? -1
: cmp > 0 ? +1
: 0;
}
int main()
{
std::array arr{1, 2, 3, 4, 5, 6, 7, 8};
for (const int key : {4, 8, 9})
{
const int* p = static_cast<int*>(
std::bsearch(&key,
arr.data(),
arr.size(),
sizeof(decltype(arr)::value_type),
compare<int>));
std::cout << "value " << key;
if (p)
std::cout << " found at position " << (p - arr.data()) << '\n';
else
std::cout << " not found\n";
}
}
출력:
value 4 found at position 3
value 8 found at position 7
value 9 not found
참조
| 불특정 유형의 요소 범위를 정렬합니다 (함수) | |
| 이진 탐색을 사용하여 주어진 값과 일치하는 요소의 범위를 찾습니다 (함수 템플릿 & 알고리즘 함수 객체) | |
(C++20) |
|
C 문서에 대한 bsearch
| |