如果我们有对的矢量,如何进行下限二进制搜索

How to make lower bound binary search if we have vector of pairs

本文关键字:何进行 二进制 搜索 我们有 如果      更新时间:2023-10-16

我正在尝试在我的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);
}
}

换句话说,我正在寻找第一个值,但是如果有更多值返回最小的第二个元素。

预先感谢。

较少的运算符在配对上工作,因此您可以直接使用

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