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

How to use member function in compare?

本文关键字:成员 函数 比较      更新时间:2023-10-16

例如,我有一个类

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

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

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

以及如何在给定Value的情况下找到v中的元素。

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

您需要传递一个比较两个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的函子。

对于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));