#define UNIT r6_bsearch #include auto search = []( std::vector< int > &vec, int val, auto cmp ) { auto b = vec.begin(), e = vec.end(); while ( b < e ) /* the search interval is not empty */ { auto mid = b + ( e - b ) / 2; if ( cmp( val, *mid ) ) e = mid; /* must be in [b, mid) */ else if ( cmp( *mid, val ) ) b = mid + 1; /* must be in (mid, e) */ else return mid; /* we found it */ } return vec.end(); }; #include "test_main.cpp"