binary predicate which returns true if the first argument is less than (i.e. is ordered before) the second.
The type Type1 must be such that an object of type T can be implicitly converted to Type1.
The type Type2 must be such that an object of type ForwardIt can be dereferenced and then implicitly converted to Type2.
NOTE: upper_bound's first argument represents what is in target, second argument represents what is existed in collection. (ordering different from lower_bound!!!)
E.g. comp could be - [](target_val_t tgt_val. const vec_value_t& v) { return tgt_val < f(v); }
std::binary_search
Checks if an element equivalent to value appears within the range [first, last).