我查看了find和binary_search,但是find没有利用向量排序的事实,而binary_search只返回true或false,而不是它找到值的位置。是否有任何功能可以让我两全其美?
答案 0 :(得分:37)
std::lower_bound会为你做到这一点。它位于binary_search顶部的等效行为部分。
答案 1 :(得分:14)
有一个方法std::equal_range
,它会给你一对包含保持所需值的子集的下限和上限。如果对中的这两个项目都相同,那么您要查找的值就不存在。
答案 2 :(得分:2)
template<class T, class U>
bool contains(const std::vector<T>& container, const U& v)
{
auto it = std::lower_bound(
container.begin(),
container.end(),
v,
[](const T& l, const U& r){ return l < r; });
return it != container.end() && *it == v;
}