检查排序列表是否包含范围内的数字

时间:2015-03-04 08:09:54

标签: c++ c++11

假设我有一个已排序的数组L并且我已经给了一些数字i,j。是否有库函数用于检查L是否包含[i,j]范围内的数字?我知道这很容易通过二进制搜索算法实现,但我宁愿避免使用它。

2 个答案:

答案 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 <进行比较,因此您可以轻松更改此函数以使用自定义比较谓词。

Live Demo

答案 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;});