我有一个类的向量/容器,我想找到具有特定成员的最大/最小值的元素;例如:
#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无论如何,所以目前我不会进一步研究它。
1条答案
按热度按时间2wnc66cl1#
有多种方法:
std::min
std::min_element
例如: