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

时间:2018-01-08 10:06:34

标签: c++ vector

所以,我想要的是从每一行(在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;
 }

1 个答案:

答案 0 :(得分:2)

在这个循环中:

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