在 2D 向量中从每一行添加最大元素,以使行元素 $A_i$ 小于 $A_(i+1)$

Adding max elements from each row in 2D vector such that row element $A_i$ is less that $A_(i+1)$

本文关键字:元素 i+1 小于 添加 向量 2D 一行      更新时间:2023-10-16

所以,我想要的是从每一行(在 2D 向量中(收集最大元素并将其推送到新向量中。如果新向量被排序,我想要所有向量元素的总和。

我试过了,但代码显示错误:"无法将'std::vector'转换为'int'赋值">

另外,我的代码是否正确?

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int t,n,v1;
vector < vector<int> > vec;
vector<int> max;
cin>>t;
while(t--)
{
 cin>>n;
 for(int i=0; i<n; i++)
 {  vector<int> row;
    for(int j=0; j<n; j++)
    {
     int val;
      cin>>val;
      row.push_back(val);   
     }
     vec.push_back(row);
       }    
for (int i=0; i<n; i++)
{
    for(int j=0; j<n; j++)
    {
        v1=*max_element(vec.begin(), vec.end());
        max.push_back(v1);
    }
}
if(is_sorted(max.begin(),max.end()))
{
    cout<<accumulate(max.begin(), max.end(),0)<<endl;
}
else
cout<<"-1"<<endl;
}
return 0;
 }

在此循环中:

for (int i=0; i<n; i++)
{
    for(int j=0; j<n; j++)
    {
        v1=*max_element(vec.begin(), vec.end());
        max.push_back(v1);
    }
}

您正在尝试从 vec 中获取最大的元素,这是一个向量的向量,并将其添加到 max 中,这是一个 int 的向量。可能你想要的是这样的:

for (int i=0; i<n; i++)
{
    v1=*max_element(vec[i].begin(), vec[i].end());
    max.push_back(v1);
}

或者使用 C++11:

for (const vector<int> &row : vec)  // Or: for (const auto &row : vec)
{
    v1=*max_element(row.begin(), row.end());
    max.push_back(v1);
}

另外,您应该在使用之前#include <numeric> std::accumulate