sort函数在c ++中不能使用2d向量

时间:2014-09-14 18:25:49

标签: c++ sorting vector

我用C ++创建了一个2D矢量

vector< vector<float> *> mvector
mvector.push_back( new vector<float>(2,0.0))

每个vector元素都包含一个指向大小为2的向量的指针。我想在C ++中使用pre-puilt排序函数对第二个元素进行排序。

我的代码是:

#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>

using std::cout;
using std::cin;
using std::endl;
using std::vector;
using std::sort;


int mycomp( vector<float> *a ,  vector<float > *b)
{

    //return ((vector< vector<float> > *)a)[0][1] - (( vector< vector<float> > *)b)[0][1];
     //return (vector < vector<float> *>*)a[0][1] - (vector< vector<float> *>*)b[0][1]; 
    return a->at(1) - b->at(1);
}


int main(void)
{
    vector< vector<float> * > mvector ;

    int i;

    for(i=0;i<2;i++)
    {
        mvector.push_back( new vector<float>(2,0.0) ) ;
        cin >> mvector.back()->at(0) ;
        mvector.back()->at(1) = sin(mvector.at(i)->at(0));
    }


    sort(mvector.begin() , mvector.end() , mycomp);

    for(i=0;i<2;i++)
    {
        cout << mvector.at(i)->at(0) << " : " << mvector.at(i)->at(1) << endl;
    }



    return 0;
}

但排序功能不起作用,我认为我在排序函数中传递2D向量的引用时出错了。 任何人都可以纠正

1 个答案:

答案 0 :(得分:0)

vector< vector<float> > mvector;

sort(mvector.begin(), mvector.end(), [](const vector<float>& left, const vector<float>& right)
{
    return left.at(1) < right.at(1);
});