例如,我有一个班级
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
答案 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));