如何从向量中提取基于属性的最大对象?

She*_*ila 4 c++ stl

假设我有一堆Donut对象,每个甜甜圈都有一个公共整数属性diameter.如果我有甜甜圈矢量,我怎样才能提取最小或最大直径的甜甜圈?

Jam*_*lis 16

你用std::min_elementstd::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'
Run Code Online (Sandbox Code Playgroud)

如果要使用除operator<(默认情况下使用)之外的其他内容来比较元素,则需要编写自定义比较器:

bool compare_donut_diameters(const Donut& x, const Donut& y)
{
    return x.diameter < y.diameter;
}
Run Code Online (Sandbox Code Playgroud)

用作:

std::vector<Donut> v;
std::vector<Donut>::iterator it = std::max_element(v.begin, v.end(), 
                                                   compare_donut_diameters);
Run Code Online (Sandbox Code Playgroud)

您还可以使用函数对象(也称为仿函数)来实现比较器,或者如果您的编译器支持lambda表达式,您可以使用lambda:

auto it = std::max_element(v.begin(), v.end(), 
    [](const Donut& x, const Donut& y) {  return x.diameter < y.diameter; });
Run Code Online (Sandbox Code Playgroud)

  • 是的,肯定会花点时间弄清楚如何在80列中使用lambda函数;-) (2认同)
  • @史蒂夫:说真的!我想我将最后一个例子重新格式化了四次......宽屏显示器更普遍是一件好事。240 行我来了! (2认同)