正在检查排序列表中是否有一个范围内的数字

Checking if sorted list has a number in a range

本文关键字:有一个 范围内 数字 是否 检查 排序 列表      更新时间:2023-10-16

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

它可以实现为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 <进行比较,因此您可以很容易地将此函数更改为使用自定义比较谓词。

实时演示

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