lower_bound和upper_bound都是用于在有序数组中进行二分查找的函数
// 在升序数组中
int index = lower_bound(sorted_nums.begin(), sorted_nums.end(), num) - sorted_nums.begin(); // 用于查找第一个大于等于num的数字
int index = upper_bound(sorted_nums.begin(), sorted_nums.end(), num) - sorted_nums.begin(); // 用于查找第一个大于num的数字
// 在降序数组中
int index = lower_bound(sorted_nums.begin(), sorted_nums.end(), num, greater<type>()) - sorted_nums.begin(); // 用于查找第一个小于等于num的数字
int index = upper_bound(sorted_nums.begin(), sorted_nums.end(), num, greater<type>()) - sorted_nums.begin(); // 用于查找第一个小于num的数字
#include<iostream>
using namespace std;
int main(){
int num[6]={1,2,4,7,15,34};
sort(num,num+6); //按从小到大排序
int pos1=lower_bound(num,num+6,7)-num; //返回数组中第一个大于或等于被查数的值
int pos2=upper_bound(num,num+6,7)-num; //返回数组中第一个大于被查数的值
cout<<pos1<<" "<<num[pos1]<<endl;
cout<<pos2<<" "<<num[pos2]<<endl;
sort(num,num+6,,greater<int>()); //按从大到小排序
int pos3=lower_bound(num,num+6,7,greater<int>())-num; //返回数组中第一个小于或等于被查数的值
int pos4=upper_bound(num,num+6,7,greater<int>())-num; //返回数组中第一个小于被查数的值
cout<<pos3<<" "<<num[pos3]<<endl;
cout<<pos4<<" "<<num[pos4]<<endl;
return 0;
}
reference: https://blog.csdn.net/qq_40160605/article/details/80150252