如何对作为二维矩阵元素的vector <int>进行排序?

时间:2015-11-06 10:30:51

标签: c++

我试图在向量上使用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;
        }*/

   }
}

1 个答案:

答案 0 :(得分:4)

矢量不是通过作为数组的元素来改变其属性。因此,您可以对它进行排序,就像您将的矢量排序为2D数组的元素一样:

sort(cost[tx][ty].begin(), cost[tx][ty].end());

sort(begin(cost[tx][ty]), end(cost[tx][ty]));

假设依赖于参数的查找找到std::sortstd::beginstd::end