如果我们有对向量,如何进行下界二分搜索
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()));
【讨论】:
以上是关于如果我们有对向量,如何进行下界二分搜索的主要内容,如果未能解决你的问题,请参考以下文章