#include <numeric> #include <list> #include <functional> #include <iterator> #include <iostream> using namespace std; #include <algorithm> #include <vector> #include <assert.h> int main() { int ia[] = {29,23,20,22,17,15,26,51,19,12,35,40}; sort( &ia[0], &ia[12] ); bool found_it = binary_search( &ia[0], &ia[12], 18 ); assert( found_it == false ); vector< int > vec( ia, ia+12 ); sort( vec.begin(), vec.end(), less<int>() ); found_it = binary_search( vec.begin(), vec.end(), 26, less<int>() ); assert( found_it == true ); } /************************************************************************/ template<class _FwdIt, class _Ty> inline bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val) { // test if _Val equivalent to some element, using operator< _First = std::lower_bound(_First, _Last, _Val); return (_First != _Last && !(_Val < *_First)); } /************************************************************************/ /************************************************************************/ template<class _FwdIt, class _Ty, class _Pr> inline bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val, _Pr _Pred) { // test if _Val equivalent to some element, using _Pred _First = std::lower_bound(_First, _Last, _Val, _Pred); return (_First != _Last && !_Pred(_Val, *_First)); } /************************************************************************/