通过包含两个变量的键进行二进制搜索

时间:2018-04-09 10:09:17

标签: c++ algorithm binary-search

我有一个排序的对(x,y)数组,按x排序,对于相同的x,它们按y排序。澄清一个例子是(2,3),(2,4),(3) ,2),(3,4),(3,5)。对于给定的对(a,b),我想找到对(c,d)使得c> a和d> b使得c和d是最小的。我觉得这可以通过二分搜索完成,但我不知道如何。关于相同的任何帮助或链接。

1 个答案:

答案 0 :(得分:1)

由于条件为c>a and d>b,我们首先会搜索c的可接受值,然后搜索最小d

auto compare_first = [](std::pair<int, int> const & a, std::pair<int, int> const & b){
    return a.first < b.first;
};

auto compare_second = [](std::pair<int, int> const & a, std::pair<int, int> const & b){
    return a.second < b.second;
};

std::vector<std::pair<int, int>> values { {2,3}, {2,4}, {3,2}, {3,4}, {3,5} };

std::pair<int, int> value { 2, 3 };

auto it_c = std::upper_bound(values.begin(), values.end(), value, compare_first);
auto it = std::upper_bound(it_c, values.end(), value, compare_second);

Live on ideone