查找向量的 max_element,其中的成员用于确定其是否为最大值
考虑一个具有成员 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;
}
但这太乏味了,而且我太懒了..有更好的选择吗?
Consider a class A having a member x and a std::vector< A >. Now its a common task to search for the maximal x among all elements inside the vector. Clearly I can only use std::max_element if there is an iterator on the x's. But I must write one by my own, or I just make a simple for loop.
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;
}
but it's so tedious, and I am so lazy.. Is there a better option?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以将比较器传递给 max_element。如果你的编译器支持 lambda(可能确实如此),这很简单:
You can pass a comparator to max_element. And if your compiler supports lambdas(it probably does), this is easy:
如果您可以使用
boost
,那么您可以为max_element
所需的二元谓词编写 lambda 表达式:If you can use
boost
then you can write a lambda expression for the binary predicate expected bymax_element
:1)将第一行更改为:
2)实现自定义比较器,并使用 max_element (根据需要):
http://www.cplusplus.com/reference/algorithm/max_element/
1) Change the 1st line to this :
2) Implement a custom comparator, and use max_element (as you wanted) :
http://www.cplusplus.com/reference/algorithm/max_element/
在你的类中实现
operator<
,调用:Implement
operator<
in your class, the call: