c++ - lower_bound 执行二进制搜索

标签 c++ binary-search

在这里,我使用 std::lower_bound() 创建了一个二进制搜索函数。如下图。如果我传递 std::pair,这会很好地工作,但是我只想对 pair 的第一个值执行二进制搜索。我认为在 lower_bound()Comp 参数中可以做到这一点,但不完全确定如何做到。

即我的 vector 如下所示。

std::vector<std::pair<int,double>> v;

我只想比较第一个值,即 int

template<class ForwardIt, class T>
ForwardIt binary_searcht(ForwardIt first, ForwardIt last, const T& value)
{
    ForwardIt i = std::lower_bound(first, last, value);
    if (i != last && !(value < *i))
        return i;
    else
        return last;

}

最佳答案

您需要像在 std::lower_bound 中那样向您的函数添加比较类:

template<class ForwardIt, class T, class Compare>
ForwardIt binary_searcht(ForwardIt first, ForwardIt last, const T& value, Compare cmp)
{
    ForwardIt i = std::lower_bound(first, last, value, cmp);
    if (i != last && !cmp(value, *i))
        return i;
    else
        return last;

}

typedef std::pair<int,double> mypair;
std::vector<mypair> v;
auto f = binary_searcht( v.begin(), v.end(), value, 
    []( const mypair &p1, const mypair &p2 ) { return p1.first < p2.first; } );

关于c++ - lower_bound 执行二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30352231/

相关文章:

c++ - 与竞争特定内存地址(互斥锁暂停另一个)相比,circularBuffer 如何提高性能?

c++ - 使用 Visual Studio boost asio TCP IP asio 类编译错误。错误 : C2228: left of '.close' must have class/struct/union

c++ - 用 min_element boost 信号

c++ - 如何对任意排序的数据执行(几乎)无分支的二进制搜索?

c - 二分查找两个无符号整数

python - Python 中的递归二分查找

c++ - 简单的字符串比较如何导致 OleException?

c++ - 模幂运算

c# - 为什么 List.BinarySearch() 除了 IComparer<T> 之外没有采用 Comparison<T> 的重载?

c - 为什么第 12 行被打印了两次?