如何将boost :: lambda与std :: find_if一起使用?

时间:2009-08-28 10:54:14

标签: c++

我有一个std :: vector,我想检查一个特定的属性 每个元素。 SomeStruct有一个属性'type'。我想检查一下这个属性 为Type1或Type2。

我的计划是使用boost :: lambda。

std::vector<SomeStruct>::const_iterator it =
    std::find_if(
        vec.begin(), vec.end(),
        _1.type == SomeStruct::Type1 || _1.type == SomeStruct::Type2);

因为我需要访问每个元素的特定属性,所以我不确定是否可以 完全使用boost :: lambda。

任何提示?

2 个答案:

答案 0 :(得分:10)

std::find_if(
    vec.begin(), vec.end(),
    bind(&SomeStruct::type, _1) == SomeStruct::Type1 ||
    bind(&SomeStruct::type, _1) == SomeStruct::Type2);

答案 1 :(得分:1)

由于

,您的表达式无法编译
_1.type

点运算符不能重载,因此表达式不能用作lambda表达式,它只是指boost :: lambda.hpp中定义的对象type的成员_1。好吧,我不知道什么是_1类型,并且考虑这种类型让我不寒而栗 - 这不适合我们,凡人知道它:-)。
正确的表达式由sepp2k给出。