在不使用“for”循环的情况下查找 vector<vector<int>> 中的最大值

C. *_*ang 0 c++

我们知道对于vector<int> A,我们可以使用*max_element(A.begin(), A.end())来找到 中的最大值A。但是,我想知道是否有干净的方法可以找到 a 中的最大值vector<vector<int>> B,避免使用for循环?

如果我们使用for循环,代码可能很简单,例如:

int maxvalue = INT_MIN;
for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
        maxvalue = max(maxvalue, B[i][j]);
Run Code Online (Sandbox Code Playgroud)

或者

int maxvalue = INT_MIN;
for (int i = 0; i < m; i++)
{
    int temp = *max_element(B[i].begin(), B[i].end());
    maxvalue = max(maxvalue, temp);
}
Run Code Online (Sandbox Code Playgroud)

但是我还是觉得不够干净。而且我不喜欢for循环。


最后,我选择了以下代码来做到这一点:

auto itv = max_element(A.begin(), A.end(), [](vector<int>& a, vector<int>& b)
        { return *max_element(a.begin(), a.end()) < *max_element(b.begin(), b.end()); });
int ans = *max_element(itv->begin(), itv->end());
Run Code Online (Sandbox Code Playgroud)

Edw*_*nge 5

auto max_value = std::accumulate(std::begin(B), std::end(B),
      std::numeric_limits<int>::min(), 
      [] (int cur_max, auto && vec) 
      { 
        return std::max(cur_max, *std::max_element(std::begin(v), std::end(v));
      });
Run Code Online (Sandbox Code Playgroud)