C++ 算法 binary_search()

2024年8月30日 | 阅读4分钟

C++ 算法 binary_search() 函数用于检查范围 [first, last) 中的元素是否与 val(或二元谓词)等效,否则返回 false。

  • 范围 [first, last) 必须满足以下所有条件:
    • 相对于 element < val 或 comp (element, val) 进行分区。
    • 相对于 !(val < element) 或 !comp(value, element) 进行分区。
    • 对于所有元素,如果 element < val 或 comp (element, val) 为 true,则 !(val < element) 或 !comp(val, element) 也为 true。
  • 第一个版本使用运算符 < 比较元素,第二个版本使用给定的比较函数,即 comp。

语法

参数

first: 指向要搜索的范围中第一个元素的前向迭代器。

last: 指向要搜索的范围中最后一个元素之后的前向迭代器。

comp:一个用户定义的二元谓词函数,接受两个参数,如果这两个参数有序则返回true,否则返回false。它遵循严格的弱排序来对元素进行排序。

val: 用于比较范围内元素的上界值。

返回值

如果找到与 val 等效的元素,则返回 true,否则返回 false。

复杂度

平均而言,复杂度与 first 和 last 之间的距离成对数关系:执行最多 log2 (N) + 2 次元素比较,其中 N = last - first。

数据竞争

访问范围 [first, last) 中的对象。

异常

如果元素比较或迭代器操作抛出异常,此函数将抛出异常。

请注意,无效参数会导致未定义行为。

示例 1

让我们看一个简单的例子来演示 binary_search() 的用法。

输出

4 found

示例 2

让我们看另一个简单示例

输出

looking for a 3... found!
looking for a 6... not found.

示例 3

让我们看另一个简单的例子来使用比较函数比较元素。

输出

Here are the values in the vector:
1 2 3 4 5 6 7 9 10 
The value 3 was found.
The value 8 was not found.

示例 4

让我们看另一个简单示例

输出

Sorted vector elements : 1 2 3 4 5 6 7 8 9 
Searching for 4 : found!
Searching for element greater than 9 : not found.

下一主题C++ 算法