std::binary_search仅返回bool值表示元素是否存在,不提供位置信息;需获取位置时应改用std::lower_bound配合手动比对,且所有算法均要求容器已排序。
std::binary_search 返回值到底代表什么
std::binary_search 只返回 bool:找到是 true,没找到是 false。它**不告诉你位置**,也不区分“等于”和“插入点”,纯粹回答“是否存在”。如果你需要下标、迭代器或进一步做插入/修改,不能只靠它。
想查存在性又需要位置?改用 lower_bound + 检查
真正实用的模式是组合 std::lower_bound 和手动比对:
auto it = std::lower_bound(vec.begin(), vec.end(), target);
if (it != vec.end() && *it == target) {
// 元素存在,it 就是指向它的迭代器
} else {
// 不存在,it 是第一个 >= target 的位置(可作插入点)
}
-
std::lower_bound时间复杂度仍是 O(log n),和binary_search相同 - 避免重复查找:用一次
lower_bound同时拿到位置和存在性判断 - 若容器是
std::set或std::map,直接用.find()更自然,它返回有效迭代器或.end()
常见误用:把 binary_search 当成 find 使用
典型错误写法: