upper_bound()则相反。 自定义的比较函数对于这两个二分查找函数而言是个黑箱,只被关心返回值是几。 那么我们可以让比较函数只关心两个参数的地址,用这个地址瞎搞,不去真的访问这两个地址里面的值,比如刚才给出的例子,找平方根,可以这样写: constint*p=0;boolcmp(constint&x,constint&y){return(&x-p)<(&...
最后把主函数贴上做结: int main(int argc, char* argv[]) { // 这里你可以使用random的方法进行测试。 int x[] = {1,2,3,4,5,5,5,5,9}; vector<int> v(x,x+9); sort(v.begin(),v.end()); cout << (int)(upper_bound(v.begin(),v.end(),9)-v.begin()); cout << upper_b...
JAVA实现lowerBound和upperBound函数 //找到第一个大于等于x的位置 public static int lowerBound(User[] user , int low, int high, int x){ int mid; while (low <= high){ mid = (low + high)>>1; if(user[mid].likeValue >= x) high = mid-1; else low = mid+1; } return low; } ...