如何获得二维向量中所有整数的最大值?

问题描述

我正在尝试获取迭代器指向的二维数组之外的最大值。

示例

输入

数据 = {{},{3,11,4},{1,2},{5,6}};

输出

最大 = 11

我有一个二维数组,使用 max_element 我试图从数组中的值中获取最大值。

使用一维迭代器,您可以取消引用迭代器并获得值,即 *iteratorOneD。但是我怎么能用 2d 迭代器做这样的事情?

我尝试了一些这样的事情。

vector<vector <int>>::iterator position;
position = std::max_element(Data.begin(),Data.end());

int max = *position[0];

cout<< *position << endl;

但还没有任何效果。我收到此错误

C2440 "Initialisierung": "std::vector" 不能转换为 int

cout << *position << endl; 输出std::vector(1062256,1027080)。 我希望能够将这些值之一分配给 int max

解决方法

您可以在“外部”std::max_element 创建一个迭代器来跟踪迄今为止最大的元素。

int main() { 
    std::vector<std::vector<int>> Data{{},{3,11,4},{1,2},{5,6}};

    // find the first non-empty vector
    auto ne = std::find_if(Data.begin(),Data.end(),[](auto& v) { return !v.empty(); });

    if(ne == Data.end()) return 1; // no elements in **any** inner vector

    // set the inner iterator to the max element in the first non-empty vector
    auto inner = std::max_element(ne->begin(),ne->end());

    auto position = std::max_element(ne,[&inner](auto&,auto& v2) {
            if(v2.empty()) return false;

            // find the max_element in this inner vector
            auto tmp  = std::max_element(v2.begin(),v2.end());

            // is it greater than the one we had stored
            if(*inner < *tmp) {
                inner = tmp;
                return true;
            }
            return false;
        });

    std::cout << "the vector ";
    for(auto& col : *position) std::cout << col << ' ';
    std::cout << "contains the max element " << *inner << '\n';
}

输出:

the vector 3 11 4 contains the max element 11
,

从 C++20 开始,您可以使用范围视图从二维向量创建一维视图

final routes = <String,WidgetBuilder>{
  '/one': (BuildContext context) => PageOne(),'/two': (BuildContext context) => PageTwo(),...
};

runApp(MaterialApp(initialRoute: '/one',routes: appRoutes));

然后使用范围算法,您可以找到最大元素

auto as1D = Data | std::views::join;

这是一个demo