c++ 查找容器中成员类的最大/最小值

dw1jzc5e  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(149)

我有一个类的向量/容器,我想找到具有特定成员的最大/最小值的元素;例如:

#include <vector>

struct A {
    int val;
};

int main() {
    std::vector<A> v{{1},{2},{3}};

    // how do I find the maximum of .val inside the vector?
}

有没有一种"STL"方法可以在不显式迭代容器和比较值的情况下找到项?

对这两种解决方案的评论

我将在此添加一个基于@Jarod42对接受解的评论的解,基于std::ranges::less {}:

#include <iostream>
#include <vector>
#include <algorithm>

struct A {
    int val1;
    int val2;
};

int main()
{
    std::vector<A> v{{6,8}, {4,10}, {5,12}};

    // How can I find out the minimum and maximum?
    const auto [min, max] = std::ranges::minmax_element(v, std::ranges::less{}, &A::val1);
    std::cout << "Minimum Number: " << min->val1 << '\n';
    std::cout << "Maximum Number: " << max->val1 << '\n';
}

当确定最小值/最大值的比较不重要时,我更喜欢这种解决方案,而当"小于"的定义复杂时,可接受的解决方案更通用,可以使用。
不知道它是否需要C20的范围,但我使用C20无论如何,所以目前我不会进一步研究它。

2wnc66cl

2wnc66cl1#

有多种方法:

例如:

auto smallest = std::min_element(v.begin(), v.end(), [](const A v1, const A v2) {
      return v1.val < v2.val;
});
    
std::cout << "Smallest: " << smallest->val << "\n";

相关问题