binary_search()在C++中找到的用法有两种

第一种是查询容器或数组中是否有该元素,
A.原型如下:
		// TEMPLATE FUNCTION binary_search
template<class _FwdIt,
	class _Ty> inline
	bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
	{	// test if _Val equivalent to some element, using operator<
	return (_STD binary_search(_First, _Last, _Val, less<>()));
	}
B.函数模板:binary_search(arr[],arr[]+size , indx)
C. 参数说明:
  • arr[]: 数组首地址
  • size:数组元素个数
  • indx:需要查找的值
D.函数功能: 在数组中以二分法检索的方式查找,若在数组(要求数组元素非递减)中查找到indx元素则真,若查找不到则返回值为假。
第二种是查询容器或数组中该元素前面是否拥有小于该元素的值
A.原型如下:
		// TEMPLATE FUNCTION binary_search WITH PRED
template<class _FwdIt,
	class _Ty,
	class _Pr> inline
	bool binary_search(_FwdIt _First, _FwdIt _Last,
		const _Ty& _Val, _Pr _Pred)
	{	// test if _Val equivalent to some element, using _Pred
	_First = _STD lower_bound(_First, _Last, _Val, _Pred);
	return (_First != _Last && !_Pred(_Val, *_First));
	}
B.函数模板:binary_search(arr[],arr[]+size , indx , compare)
C. 参数说明:
  • arr[]: 数组首地址
  • size:数组元素个数
  • indx:需要查找的值
  • compare:比较方法
D.函数功能: 在数组中以二分法检索的方式查找,在数组中查找到indx元素并且比较该元素数组前面是否拥有小于该元素的值如果有则为假,无则为真。若在数组中查不到indx元素则返回值也为假。

例子如下:

#include <algorithm>//adjacent_find的使用
#include<iostream>

using namespace std;
void main() {
	 //前面有小于的值
	 int value1[20] = { 20,10,15,22,69,70,96,100 };
	 //前面有大于的值
	 int value2[20] = { 69,70,96,100,22,20,10,15 }; 
	 //比较方法
	 auto predicate = [](int a, int b) 
	 {
		 return a > b; 
};
	int wanted{ 22 };//比较元素
	int conp1 = binary_search(value1, value1+8, wanted);//查询元素
	int conp2 = binary_search(value1, value1+8, wanted,predicate);//查询比较元素
	int conp3 = binary_search(value2, value2 + 8, wanted, predicate);//查询比较元素
	cout << "查询是否有"<< wanted <<"的值:" <<conp1 << endl
		<< "查询元素之前是否无小于" << wanted << "的值:" << conp2<<endl
		<< "查询元素之前是否无小于" << wanted << "的值:" << conp3<<endl;
}

输出结果如下:(1为真,0为假)
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐