[ Web Proxy ]
URL:
Viewing: https://ru.cppreference.com/cpp/algorithm/bsearch [Back]  [Original]

std::bsearch cppreference.com
cppreference.com

std::bsearch

cppreference.com
 
C++
(C++20)
(C++20)
(C++11)
(C++20)
/
(C++11)
(C++11)
(C++11)
(C++17)
 
(C++20)
, ranges::copy, ranges::sort, ...
(C++17)
(C++11)(C++11)(C++11)
(C++17)
(C++11)
( )
(C++11)
/
(C++11)
(C++17)

(C++17)
(C++17)
(C++17)
C
 
<tbody> </tbody>
void* bsearch( const void* key, const void* ptr, std::size_t count, std::size_t size, /*-*/* comp ); void* bsearch( const void* key, const void* ptr, std::size_t count, std::size_t size, /*c--*/* comp );
(1)
extern "C++" using /*-*/ = int(const void*, const void*); extern "C" using /*c--*/ = int(const void*, const void*);
(2) ( *)

, , key , ptr. count size , key, , , , , , key. . , comp.

, , comp.

, comp , , .

key
ptr
count
size
comp , , , , , , . key , .

:

int cmp(const void *a, const void *b);

, .

, .

, C, POSIX , , .

, C++, , comp (no section name )

#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 << " " << key;
        (p) ? std::cout << "    " << (p - arr.data()) << '\n'
            : std::cout << "  \n";
    }
}

:

 4    3
 8    7
 9  


() []
,
( ) []
C bsearch

Web Proxy Viewer  |  New URL  |  Original Page