我试图通过使用pair.first和pair.second找到元素的下限和上限
使用gcc编译时出现以下错误:
zco.cpp: In function ‘int main()’:
zco.cpp:136:47: error: cannot convert
‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ to ‘int*’ in
initialization
int *a = lower_bound(x.begin(), x.end(),temp1);
^
zco.cpp:137:47: error: cannot convert
‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ to ‘int*’ in
initialization
int *b = upper_bound(y.begin(), y.end(),temp2);
代码:
int main(){
int N,X,Y;
scanf("%d %d %d",&N,&X,&Y);
vector< pair<int,int> > n(N);
for(int i=0;i<N;i++){
int temp1,temp2;
scanf("%d %d",&temp1,&temp2);
n[i] = make_pair(temp1,temp2);
}
vector<int> x(X);
for(int i=0;i<X;i++){
scanf("%d",&x[i]);
}
vector<int> y(Y);
for(int i=0;i<Y;i++){
scanf("%d",&y[i]);
}
stable_sort(n.begin(), n.end());
stable_sort(x.begin(), x.end());
stable_sort(y.begin(), y.end());
int sum = 0;
for(int i=0;i<N;i++){
int temp1 = n[i].first;
int temp2 = n[i].second;
int *a = lower_bound(x.begin(), x.end(),temp1);
int *b = upper_bound(y.begin(), y.end(),temp2);
sum += b-a+1;
}
printf("%d",sum);
}
如何解决此错误。请帮帮我。
答案 0 :(得分:2)
您需要一个矢量迭代器,而不是指向其数据类型的指针,如下所示:
std::vector<int>::iterator temp1;
std::vector<int>::iterator temp2;
检查std::lower_bound的参考及其示例以获取更多信息。
答案 1 :(得分:1)
以下是如何将迭代器转换为指针,首先取消引用迭代器,它将产生一个引用(在您的情况下为int),然后获取引用值的地址。这给出了:
std::vector<int>::iterator it_a = std::lower_bound(x.begin(), x.end(),temp1);
int& ref_a = *it_a;
int* ptr_a = &ref_a;
所有这些都可以在一个语句中完成,这使得转换变得微不足道:
int *a = &*std::lower_bound(x.begin(), x.end(),temp1);