假设我有一个已排序的数组L并且我已经给了一些数字i,j。是否有库函数用于检查L是否包含[i,j]范围内的数字?我知道这很容易通过二进制搜索算法实现,但我宁愿避免使用它。
答案 0 :(得分:2)
它可以实现为std::lower_bound
:
template<typename ForwardIt, typename T>
bool has_in_range(ForwardIt first, ForwardIt last, const T& i, const T& j) {
auto lb = std::lower_bound(first, last, i);
return lb != last && !(j < *lb);
}
在上面的代码中,我故意使用operator <
进行比较,因此您可以轻松更改此函数以使用自定义比较谓词。
答案 1 :(得分:0)
std::vector<int> myVec;
for( int a = i; a <= j; a++)
myVec.push_back(a);
bool contains = std::any_of(l.begin(), l.end(),
[&myVec] (int n) { if (std::find(myVec.begin(), myVec.end(), n) == myVec.end())
return false;
return true;});