假设矢量数组按规则排序: - A [i]> A [i](a,b)中的所有对的[j]和A [j] a> c中的所有对(c,d)和b> d。假设输入数组已排序。 现在给出一个上面类型的数组,
A[0] = (0,1)
A[1] = (4,3), (2,5)
A[2] = (12,4), (10, 6)
...
现在你把一对作为输入,如何使用内置的lower_bound函数找到lower_bound。 我写了一段代码,但它给了我一些error。我错过了什么?
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int,int> mypair;
vector <mypair> A[100008];
mypair B;
bool operator < (const mypair &a1, const mypair &a2){
return (a1.first < a2.first && a1.second < a2.second);
}
bool operator < (const vector<mypair> &a1, const mypair &a2){
for(int i = 0; i< a1.size();i++){
if (a1[i] < a2)
return true;
}
return false;
}
bool operator < (const mypair &a1, const vector<mypair> &a2){
for(int i = 0; i< a2.size();i++){
if(a1 < a2[i])
return true;
}
return false;
}
int main()
{
int N,x,y;
scanf("%d",&N);
int cnt = 0;
for(int i=0;i<N;i++){
scanf("%d %d",&x,&y);
B = make_pair(x,y);
// consider A as filled up as stated
x = lower_bound(A,A+N,B) - A;
}
return 0;
}
答案 0 :(得分:4)
函数lower_bound
也为4个参数重载:
template<class FI, class T, class Comp>
FI lower_bound( FI first, FI last, const T& value, Comp comp );
因此,您可以将比较器作为第四个参数传递:
bool cmp(const vector<mypair> &a1, const mypair &a2){
for(int i = 0; i< a1.size();i++){
if (a1[i] < a2)
return true;
}
return false;
}
// ...
x = lower_bound(A,A+N,B, cmp) - A;