排序函数不适用于c++中的二维向量

sort function not working with 2d vector in c++

本文关键字:二维 向量 不适用 函数 适用于 c++ 排序      更新时间:2023-10-16

我在C++中创建了一个2D矢量作为

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

每个矢量元素都包含一个指向大小为2的矢量的指针。我想使用C++中的预推排序函数,在第二个元素的基础上对向量进行排序。

我的代码是:

#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向量的引用是错误的有人能纠正吗

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