假设我有一堆Donut
对象,每个甜甜圈都有一个公共整数属性diameter
。如果我有一组甜甜圈的向量,如何提取直径最小或最大的甜甜圈?
您可以使用 std::min_element
和 std::max_element
。例如,给定一个 std::vector<int>
:
std::vector<int> v;
std::vector<int>::iterator it = std::max_element(v.begin(), v.end());
// 'it' points to the largest element in 'v'
如果你想使用除了默认的 operator<
以外的方式来比较元素,你需要编写一个自定义比较器:
bool compare_donut_diameters(const Donut& x, const Donut& y)
{
return x.diameter < y.diameter;
}
用途:
std::vector<Donut> v;
std::vector<Donut>::iterator it = std::max_element(v.begin, v.end(),
compare_donut_diameters);
您还可以使用函数对象(也称为函数符)来实现比较器,或者如果您的编译器支持lambda表达式,则可以使用lambda:
auto it = std::max_element(v.begin(), v.end(),
[](const Donut& x, const Donut& y) { return x.diameter < y.diameter; });
std::min_element
:// You can use a functor instead!
bool compare_donut(const Donut& lhs, const Donut& rhs)
{ return lhs.diameter < rhs.diameter; }
...
// min_donut is an iterator to the smallest donut in donut_vector.
std::vector<Donut>::iterator min_donut =
std::min_element(donut_vector.begin(), donut_vector.end(), compare_donut);
std::max_element
。http://www.cplusplus.com/reference/algorithm/max_element/
http://www.cplusplus.com/reference/algorithm/min_element/