查找向量的max_element,其中使用成员来确定其是否为最大值

mat*_*ath 6 c++ stl max

考虑具有成员x和std :: vector <A>的A类.现在,在向量内的所有元素中搜索最大x是一项常见任务.显然,如果x上有迭代器,我只能使用std :: max_element.但我必须自己写一个,或者我只是做一个简单的for循环.

maxSoFar = -std::numeric_limits< double >::max();
for( std::vector< A >::const_iterator cit = as.begin(); cit != as.end(); ++cit )
{
  if( cit->x > maxSoFar )
    maxSoFar = cit->x;
}
Run Code Online (Sandbox Code Playgroud)

但它太乏味了,我太懒了..有更好的选择吗?

Ben*_*ley 24

您可以将比较器传递给max_element.如果您的编译器支持lambda(它可能会),这很容易:

std::max_element(as.begin(), as.end(),
    [](A a, A b){ return a.x < b.x; });
Run Code Online (Sandbox Code Playgroud)


Nav*_*een 6

如果你可以使用boost那么你可以为预期的二元谓词编写一个lambda表达式max_element:

struct A
{
    A(int n): x(n)
    {
    }
    int x;
};

using namespace std;
using namespace boost::lambda;

int main()
{
    vector<A> as;
    as.push_back(A(7));
    as.push_back(A(5));
    as.push_back(A(3));

    vector<A>::iterator iter = max_element(as.begin(), as.end(), bind(&A::x, _2) > bind(&A::x, _1));
    int max = iter->x;
}
Run Code Online (Sandbox Code Playgroud)