priority_queue 处的函子和函数以及某种 C++

functor and function at priority_queue and sort of C++

我尝试了解 C++ 中仿函数和函数的使用

请看下面的代码

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

bool mySort(int a, int b){
    if(a > b) return true;
    return false;
}

class myClass{

public:
    bool operator()(int a, int b){
        if(a>b) return true;
        return false;
    }
};

int main(){

    //(1) priority_queue<int, vector<int>, greater<int>> aa;
    //(2) priority_queue<int, vector<int>, greater<int>()> bb;
    //(3) priority_queue<int, vector<int>, myClass> cc;
    //(4) priority_queue<int, vector<int>, mySort> dd;

    vector<int> check={1,2,3,4,5,6,7};

    //(a) sort(check.begin(), check.end(), mySort);
    //(b) sort(check.begin(), check.end(), myClass);
    //(c) sort(check.begin(), check.end(), myClass());


    return 0;
}

我发现只有 (1),(3) 和 (a),(c) 有效。

使用sort和priority_queue时,function和functor有什么区别?

我知道仿函数可以保持其状态,但是,在这种情况下,此信息不相关。

我也查了sort and priority_queue但是看不懂

你能帮帮我吗?

实例化 priority_queue 时,第三个参数必须是类型。
greater<int>myClass 是类型; greater<int>()mySort 不是。
如果您创建默认 priority_queue,它将 default-initialise 指定类型的排序。

priority_queue<int, vector<int>, greater<int>> aa;

等同于

priority_queue<int, vector<int>, greater<int>> aa(greater<int>());

priority_queue<int, vector<int>, myClass> cc;

等同于

priority_queue<int, vector<int>, myClass> cc(myClass());

当你调用sort时,你给它一个可调用对象作为第三个参数,模板参数是从函数参数推导出来的。
mySortmyClass() 是可调用对象;它们的类型分别是 bool(int,int)myClass,这些类型成为模板参数。
myClass 是一种类型,不能用作函数参数。

sort(check.begin(), check.end(), mySort);

等同于

sort<vector<int>::iterator, bool(int,int)>(check.begin(), check.end(), mySort);

sort(check.begin(), check.end(), myClass());

等同于

sort<vector<int>::iterator, myClass>(check.begin(), check.end(), myClass());