std::binary_serach, std::upper_bound以及std::lower_bound

时间:2021-05-20 06:02:09

c++二分查找的用法

主要是 std::binary_serach,  std::upper_bound以及std::lower_bound 的用法,示例如下:

 std::vector<int> vtr;
for (int i = ; i < ; i++)
{
if (i% == )
vtr.push_back(i);
} auto find = [&](int num){
return std::binary_search(vtr.begin(), vtr.end(), num); //二分查找num是否存在
}; std::cout << std::string(find() ? "Find !":"Not Find !") << std::endl;
std::cout << std::string(find() ? "Find !" : "Not Find !") << std::endl; auto upper = [&](int num){
return *std::upper_bound(vtr.begin(), vtr.end(), num); // 二分查找第一个大于num的数字
};
auto lower = [&](int num){
return *std::lower_bound(vtr.begin(), vtr.end(), num); // 二分查找第一个大于或等于num的数字
};
std::cout << upper() << std::endl;
std::cout << lower() << std::endl; sort(vtr.begin(), vtr.end(), std::greater<int>());
auto upper_greate = [&](int num){
return *std::upper_bound(vtr.begin(), vtr.end(), num, std::greater<int>());// 二分查找第一个小于num的数字
};
auto lower_greate = [&](int num){
return *std::lower_bound(vtr.begin(), vtr.end(), num, std::greater<int>());// 二分查找第一个小于或等于num的数字
};
std::cout << upper_greate() << std::endl;
std::cout << lower_greate() << std::endl;

结果:

std::binary_serach,  std::upper_bound以及std::lower_bound