Error: "reference to non static member function must be called" not getting resolved when using classes

Error: "reference to non static member function must be called" not getting resolved when using classes

我正在尝试解决一个问题,其中我有一个 n x 2 的二维数组。我想按第二列对数组进行排序。我不想使用手动排序,而是尝试使用 STL。

我的问题:我收到错误:“必须调用对非静态成员函数的引用”

我尝试在 class 之外声明函数和结构,但后来我遇到了不同的错误集。我试图实施已经存在的解决方案,但我无法得出想要的解决方案。

下面是我的代码:

class Solution {
public:
    
    struct Interval 
    { 
        int column1, column2; 
    };
    
    bool sortcol(Interval i1, Interval i2) 
    { 
        return (i1.column2 < i2.column2); 
    } 
    
    vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
        
        vector<vector<int> > count( mat.size() , vector<int> (2, 0));
        
        for( int i = 0 ; i < mat.size() ; i++ )
        {
            for( int j = 0 ; j < mat[i].size() ; j++ )
            {
                if(mat[i][j])
                {
                    count[i][1]++;
                }
            }
            
            count[i][0] = i;
        }
    
    sort(count.begin(), count.end(), sortcol); 
        
    vector<int> arr;
    
    for( int i = 0 ; i < mat.size() ; i++ )
    {
        arr.push_back( count[i][0]);
    }
    
        
    return arr;
        
    }
};

非常感谢您调查我的问题。

您的排序算法需要“函数对象”(具有 operator() 或函数指针的对象实例),它接受对 2 个比较向量和 returns 布尔值的引用,例如:

// function out of class scope
bool compVectorBySecondElt(const vector<int>& first, const vector<int>& second) {
    return first[1] < second[1]; // hope the index 1 is valid
}

如上回复所述,您的比较器可以是“自由函数、静态成员函数或 lambda”。它也可以是 class 的对象,例如:

struct MyVectorCmp {
    bool operator()(const vector<int>& first, const vector<int>& second) {
        return first[1] < second[1]; // hope the index 1 is valid
    }
};

所有这些情况的共同点是能够使用 2 个参数调用您的功能对象并接受 bool 值作为结果。

在您的示例中,您接受了错误,因为 class 的任何 非静态方法都不是常规函数 ,除了明确指定的参数外,它还可以被视为具有额外的隐式 this 参数,指向当前对象。