如何在比较中使用成员函数?

时间:2013-07-03 14:12:06

标签: c++ templates functor

例如,我有一个班级

class A
{
public:
    int Value() const;
};

如何在A::Value()函数中使用std::lower_bound作为比较?

std::vector<A> v;
std::lower_bound<v.begin(), v.end(), ???>(v, 1);

如何使用给定的v找到Value中的元素。

std::find_if<???, ???>(v.begin(), v.end(), ???); // or use other function

2 个答案:

答案 0 :(得分:4)

您需要传递一个比较两个A实例的二元谓词。例如

std::lower_bound(v.begin(), 
                 v.end(), 
                 [](const A& lhs, const A& rhs) 
                 { return lhs.Value() < rhs.Value(); });

或者,如果您没有C ++ 11支持,

bool comp(const A& lhs, const A& rhs)
{
  return lhs.Value() < rhs.Value();
}

std::lower_bound(v.begin(), v.end(), comp);

至于find_if,原则是相似的,除了你需要一元谓词,即一个带有单A并返回bool的仿函数。

答案 1 :(得分:1)

对于find_if,你需要做类似的事情:

A valueToFind;
std::find_if(v.begin(),
             v.end(),
             [valueToFind&](const A& arg)
             { return valueToFind.Value() == arg.Value() });

没有c ++ 11,

bool isEqual(const A& lhs, const A& rhs)
{
   return lhs.Value() == rhs.Value();
}

A valueToFind;
std::find_if(v.begin(), v.end(), std::bind1st(isEqual, valueToFind));