binary_search用于有序序列中高效查找元素,时间复杂度O(log n),使用前需确保序列已排序,通常配合sort使用,支持自定义比较函数,适用于vector、array等随机访问容器,关联容器推荐用成员函数find。

在C++标准模板库(STL)中,binary_search 是一个非常实用的算法,用于判断某个值是否存在于已排序的序列中。它的时间复杂度为 O(log n),比线性查找更高效,但前提是容器中的元素必须是有序的。
使用前提:序列必须有序
binary_search 只适用于有序序列。如果序列未排序,结果是未定义的,可能导致错误的判断。通常在使用前需调用 sort 算法进行排序。
示例:- 使用 std::sort(vec.begin(), vec.end()) 对 vector 排序
- 之后才能安全使用 binary_search 查找元素
基本用法
binary_search 定义在头文件
bool binary_search(Iterator first, Iterator last, const T& value);
立即学习“C++免费学习笔记(深入)”;
本文档主要讲述的是Fortran基本用法小结;希望能够给学过C但没有接触过Fortran的同学带去一些帮助。Fortran是一种编程语言。它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。FORTRAN语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
它返回一个布尔值:true 表示找到元素,false 表示未找到。
代码示例:#include#include #include int main() { std::vector nums = {5, 2, 8, 1, 9}; std::sort(nums.begin(), nums.end()); // 排序 if (std::binary_search(nums.begin(), nums.end(), 8)) { std::cout << "8 存在于序列中\n"; } else { std::cout << "8 不存在\n"; } return 0; }
支持自定义比较函数
如果序列是按特定规则排序的(如降序),需要传入相应的比较函数或函数对象,确保 binary_search 使用相同的排序规则。
- 函数原型支持第四个参数:binary_search(first, last, value, comp)
- comp 应返回 true 当第一个参数小于第二个参数
std::vectornums = {9, 8, 5, 2, 1}; // 无需重新排序,已是降序 bool found = std::binary_search(nums.begin(), nums.end(), 5, std::greater ()); if (found) { std::cout << "找到了 5\n"; }
适用容器类型
binary_search 可用于任何支持随机访问迭代器的有序容器,如:
- std::vector
- std::array
- std::deque
- 原生数组(配合指针)
注意:关联容器如 std::set 和 std::map 内部本身就是有序的,它们提供了成员函数 find 或 count,通常比使用 std::binary_search 更高效。
基本上就这些。只要记住:用 binary_search 前先排序,保持比较逻辑一致,就能高效判断元素是否存在。








