我们知道对于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)
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)
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |