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