0

例如,我有一堂课

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
4

2 回答 2

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并返回 a的函子bool

于 2013-07-03T14:17:17.577 回答
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));
于 2013-07-03T14:26:29.853 回答