STL中equal_range使用的问题
定义了结构
struct A
{
double a;
double b;
}
然后定义了 一个向量
vector < A* > avector;
这个向量按照a的大小排序。
现在我想采用算法
pair < vector <A*>::iterator, vector <A*>::iterator > it;
it = equal_range(avector.begin(), avector.end(), 3.0, compare);
得到这个向量avector中 按照成员变量 a 与 3.0 相比较得到的上下界,请问这个compare函数该怎么写呢?
c/c++ code
struct compare : public binary_function <A*,A*,bool>
{
bool operator () (A const* const rhs, A const* const lhs)
{
return rhs->a < lhs->a;
}
};
结果体要加个构造函数,然后这么用
it = equal_range(vec.begin(),vec.end(),&A(3.0),compare());
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct A{
int a;
int b;
A(int a,int b):a(a),b(b){}
};
struct compare:public binary_function<A*,A*,bool>{
bool operator()(A const* const rhs,A const* const lhs){
return rhs->a<lhs->a;
}
};
int main(){
vector<A*>vec(4);
pair<vector<A*>::iterator,vector<A*>::iterator>it;
int i;
for(i=0;i<4;i++){
(*vec[i]).a=i;
(*vec[i]).b=i;
}
it=equal_range(vec.begin(),vec.end(),&A(3,3),compare());
cout<<it.second-it.first<<endl;
}