关于sort的比较函数的static 声明

在进行编写sort函数的比较函数时,

 bool compare(string str1,string str2){
    string comp1=str1+str2;
    string comp2=str2+str1;
    
    return comp1 < comp2;
}

只是简单的外部声明,也没有类的引用,在VS上运行时正确,但是在其它平台上出现报错:

reference to non-static member function must be called sort(temp.begin(),temp.end(),compare);

意思是sort的调用必须是静态成员,之后声明为static后就正确了。

但是官方文档的例子没有这样的说明

剑指offer一道题目

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

要加static才能通过

class Solution {
public:
    //一定要加static, 为什么???
    static bool compare(string a, string b)
    {
        string A("");
        string B("");
        A=A+a;
        A=A+b;
        B=B+b;
        B=B+a;
        
        return A<B;
    }
    
    string PrintMinNumber(vector<int> numbers) {
        vector<string> h;
        string result("");
        for(int i = 0; i < numbers.size(); i++)
        {
            h.push_back(to_string(numbers[i]));
        }
        sort(h.begin(), h.end(),compare);
        for(auto it : h)
            result+=it;
        return result;
    }
};

你可能感兴趣的:(C++编程)