找到元组元素c ++的最大值

ALs*_*ALs 4 c++ tuples vector max

我想知道是否有一种简洁的方法来查找元组向量中的一个元素的最大值.例如,对于以下内容,假设我想在元组向量中找到元组的最大第二个值.

vector<tuple<int, int>> foo = { {12,1},{12,5},{5,6} };
Run Code Online (Sandbox Code Playgroud)

结果应该是6.

我可以这样做的一种方式是:

vector<double> allFoo;
for (int i = 0; i != size(foo); i++) {
    allFoo.emplace_back(get<1>(foo[i]));
}
double maxVal = *max_element(allFoo.begin(), allFoo.end());
Run Code Online (Sandbox Code Playgroud)

我觉得,因为你实际上是在两次迭代,这可以更简单地完成吗?

我的元组技能有点受限,看起来你应该能够直接在foo上做某种max_element ...

Jar*_*d42 11

在一次通过中,使用自定义比较器:

std::vector<std::tuple<int, int>> foo = { {12,1},{12,5},{5,6} };

const auto less_by_second = [](const auto& lhs, const auto& rhs)
    { return std::get<1>(lhs) < std::get<1>(rhs); };
const double maxVal = std::get<1>(*std::max_element(foo.begin(), foo.end(), less_by_second));
Run Code Online (Sandbox Code Playgroud)


DAl*_*Ale 8

使用max_element带有自定义谓词:

auto maxVal = get<1>(*max_element(foo.begin(), foo.end(), 
                      [](auto& l, auto& r) {return get<1>(l) < get<1>(r);}));   
Run Code Online (Sandbox Code Playgroud)