如果我们有对向量,如何进行下界二分搜索

Posted

技术标签:

【中文标题】如果我们有对向量,如何进行下界二分搜索【英文标题】:How to make lower bound binary search if we have vector of pairs 【发布时间】:2017-05-01 10:12:03 【问题描述】:

我正在尝试在我的 c++ 程序中实现 lower_bound 函数,但接下来的问题是:它适用于向量,但如果我们必须搜索向量对则失败

我有一个向量对,我想首先搜索该对的第一个成员,如果我们有多个具有相同值的值,我想返回第二个值中的最小值,例如:

假设我们有以下成对向量

v = (1,1),(2,1),(2,2),(2,3),(3,4),(5,6);

假设我们正在搜索值 K = 2,现在我想返回位置 1(如果数组索引为 0),因为该对的第二个值是 1,而 1 是最小的。

如何以最简单的方式实现它,我尝试实现它但编译失败,这是我的代码:

vector<pair<int,int> >a,b;
void solve() 
sort(b.begin(), b.end());
sort(a.begin(), a.end());

vector<int>::iterator it;
for(int i=0;i<a.size();i++) 
    ll zero=0;
    int to_search=max(zero, k-a[i].first);

    it=lower_bound(b.begin(), b.end(), to_search);
    int position=it-b.begin();

    if(position==b.size()) continue;
    answer=min(answer, a[i].second+b[position].second);


换句话说,我正在搜索第一个值,但如果该值更多,则返回第二个元素最小的那个。

提前致谢。

【问题讨论】:

你得到什么错误? 【参考方案1】:

较少的操作符对pair工作,所以你可以直接使用

std::lower_bound(v.begin(), v.end(), std::make_pair(2, std::numeric_limits<int>::min()));

【讨论】:

以上是关于如果我们有对向量,如何进行下界二分搜索的主要内容,如果未能解决你的问题,请参考以下文章

二分搜索以及查找区间的上下界

使用向量c ++进行二分搜索

如何使用二分搜索将元素插入已排序的向量中

使用向量的二分搜索

有重复项时对最左/最右元素进行二分搜索

涉及向量的二分搜索问题 (C++)