读书人

想借用vector实现二维数组按第一列值的

发布时间: 2012-03-16 16:34:56 作者: rapoo

想借用vector实现二维数组按第一列值的大小给数组行排序(类似matlab中的sortrows),得不到正确结果,大家帮忙查查问题!谢谢

C/C++ code
#include <vector>#include <algorithm>#include <functional>#include<iostream>using namespace std;bool lessmark(double* a,double* b){    return a[0]< b[0];}bool greatermark(double* a,double* b){    return a[0]> b[0];}int main(){    vector<double* > ctn ;    double M[3][3]={1,3,2,                9,5,6,                4,8,7};    ctn.push_back(M[0]);    ctn.push_back(M[1]);    ctn.push_back(M[2]);    for( int row = 0; row < 3; row++ )    {        for( int col = 0; col < 3; col++ )        {            cout<<ctn[row][col]<<"   ";        }        cout<<endl;    }    cout<<endl;    sort(ctn.begin(), ctn.end(),lessmark) ; //升序排序    cout<<"升序排列后:"<<endl;    for( int row = 0; row < 3; row++ )    {        for( int col = 0; col < 3; col++ )        {            cout<<ctn[row][col]<<"   ";        }        cout<<endl;    }        cout<<endl;    for( int row = 0; row < 3; row++ )    {        for( int col = 0; col < 3; col++ )        {            M[row][col]=ctn[row][col];            cout<<M[row][col]<<"   ";        }        cout<<endl;    }    sort(ctn.begin(), ctn.end(),greatermark) ; //降序排序    cout<<"降序排列后:"<<endl;    for( int row = 0; row < 3; row++ )    {        for( int col = 0; col < 3; col++ )        {            cout<<ctn[row][col]<<"   ";        }        cout<<endl;    }    cout<<endl;    for( int row = 0; row < 3; row++ )    {        for( int col = 0; col < 3; col++ )        {            M[row][col]=ctn[row][col];            cout<<M[row][col]<<"   ";        }        cout<<endl;    }    return 0   ;}



[解决办法]
vector里面存的是指针,这里sort的都是指针而已,从没改变过他指向的内容,.
[解决办法]
就是那行赋值的问题。
for( int row = 0; row < 3; row++ )
{
for( int col = 0; col < 3; col++ )
{
M[row][col]=ctn[row][col];
cout<<M[row][col]<<" ";
}
cout<<endl;
}

这样改变了数组M的值。而ctn是指向M的指针,排序都是改变ctn指向的对象,并未改变M的值。这几条语句执行完毕之后M数组就乱了~~所以得不出正确的结果!

读书人网 >C++

热点推荐