我有一个排序的对(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是最小的。我觉得这可以通过二分搜索完成,但我不知道如何。关于相同的任何帮助或链接。
答案 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);