我想知道是否有办法使用stl :: find_if来搜索用户输入的值
如果不使用任何不良约定(全局变量)或添加大量扩展代码,我不知道这样做。
例如,如果用户输入的int为10,那么我想搜索一个int的向量
iterator = find_if(begin,end,pred) //but how does pred know the user inputted value?
答案 0 :(得分:6)
您可以使用equal_to
:
find_if(a.begin(), a.end(), bind2nd(equal_to<int>(), your_value));
答案 1 :(得分:5)
pred
必须是具有overloaded()运算符的类型的实例,因此可以像函数一样调用它。
struct MyPred
{
int x;
bool operator()(int i)
{
return (i == x);
}
};
(为了简洁起见,使用struct
)
std::vector<int> v;
// fill v with ints
MyPred pred;
pred.x = 5;
std::vector<int>::iterator f
= std::find_if(v.begin(),
v.end(),
pred);
编写这样的自定义类(带有“加载”代码!)至少可以说很麻烦,但是当添加lambda语法时,C ++ 0x会有很多改进。
答案 2 :(得分:3)
您可以使用boost :: bind来获得更一般的解决方案,例如:
struct Point
{
int x;
int y;
};
vector< Point > items;
find_if( items.begin(), items.end(), boost::bind( &Point::x, _1 ) == xValue );
会找到一个x等于xValue
的点