我试图在向量上使用STl排序,该向量是2d数组的一部分,但是收到错误。这样做的正确方法是什么?试图通常使用向量作为排序(A,A + A.size()),其中A是向量。
我在给出错误的sort语句中添加了注释。
#include <iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
while(1)
{
int m,n;
cin>>m>>n;
int arr[m][n];
for(int x=0;x<m;x++)
for(int y=0;y<n;y++)
cin>>arr[x][y];
vector<int> cost[m][n]; //THIS IS THE 2-D ARRAY OF VECTORS
cost[0][0].push_back(arr[0][0]);
for(int i=1;i<m;i++)
{
cost[0][i].push_back(cost[0][i-1][0]+arr[0][i]);
}
for(int i=1;i<n;i++)
{
cost[i][0].push_back(cost[i-1][0][0]+arr[i][0]);
}
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
vector<int>::iterator it;
for(it=cost[i-1][j].begin(); it!=cost[i-1][j].end();it++)
cost[i][j].push_back(((*it)+arr[i][j]));
vector<int>::iterator it1;
for(it1=cost[i][j-1].begin(); it1!=cost[i][j-1].end();it1++)
cost[i][j].push_back(((*it1)+arr[i][j]));
//freevec(cost[i][j]);
}
}
int tx,ty,k;
cin>>tx>>ty>>k;
//THIS STEP IS GIVING AN ERROR.
sort(cost[tx][ty],cost[tx][ty]+cost[tx][ty].size());
//THIS STEP IS GIVING AN ERROR.
cout<<cost[tx][ty][k-1]<<endl;
/*
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{ cout<<"\n\n"<<arr[i][j]<<endl;
vector<int>::iterator it;
for(it=cost[i][j].begin(); it!=cost[i][j].end();it++)
cout<<(*it)<<" ";
}
cout<<endl;
}*/
}
}
答案 0 :(得分:4)
矢量不是通过作为数组的元素来改变其属性。因此,您可以对它进行排序,就像您将不的矢量排序为2D数组的元素一样:
sort(cost[tx][ty].begin(), cost[tx][ty].end());
或
sort(begin(cost[tx][ty]), end(cost[tx][ty]));
假设依赖于参数的查找找到std::sort
,std::begin
和std::end
。