如何使用比较器从向量中找到最小偶数
例如:2,3,4,5,6。
预期输出应该是 2。
如何为 min_element func 编写比较器 func 以获得最小偶数。
auto mini_even=*min_element(vec.begin(),vec.end(),cmp);
Eg: 2,3,4,5,6.
The expected output should be 2.
How can I write comparator func for min_element func to get the smallest even number.
auto mini_even=*min_element(vec.begin(),vec.end(),cmp);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用比较器将所有偶数放在奇数之前,即任何偶数都小于任何奇数,而所有其他比较都照常进行:
要处理仅包含奇数的向量的情况,您应该检查结果是否是否均匀。
正如 Jarod42 在评论中所建议的,通过定义比较器的更优雅的方式可以实现相同的效果:
std::pair
有一个operator<
,与上面相同,它将放置所有偶数(其中is_odd
为>false
) 在奇数之前。如果您想遵循常见做法在找不到所需元素时返回 vec.end() ,您可以将其包装在一个函数中:
该函数可以推广到适用于任何谓词:
现场演示
You can use a comparator that puts all even numbers before odd ones, ie any even number compares less than any odd, while all other comparisons are as usual:
To handle the case of a vector that only contains odd numbers you should check if the result is even or not.
The same effect can be achieved with a more elegant way of defining the comparator, as suggested by Jarod42 in a comment:
std::pair
s have anoperator<
that will, same as the above, place all even numbers (the ones whereis_odd
isfalse
) before the odd ones.And if you want to follow common practice to return
vec.end()
when the desired element cannot be found, you can wrap it in a function:Which can be generalized to work for any predicate:
Live Demo