C++ STL binary_search()的使用

本文详细介绍了C++中binary_search函数的两种用法:一种用于查找数组或容器中是否存在特定元素;另一种用于检查目标元素前是否存在更小的值。通过具体示例展示了如何运用这些函数模板,并解释了其参数含义及工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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为假)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值