用户搜索stl :: find_if

时间:2009-10-03 19:55:16

标签: c++ stl

我想知道是否有办法使用stl :: find_if来搜索用户输入的值

如果不使用任何不良约定(全局变量)或添加大量扩展代码,我不知道这样做。

例如,如果用户输入的int为10,那么我想搜索一个int的向量

iterator = find_if(begin,end,pred) //but how does pred know the user inputted value?

3 个答案:

答案 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

的点