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
时,你给它一个可调用对象作为第三个参数,模板参数是从函数参数推导出来的。
mySort
和 myClass()
是可调用对象;它们的类型分别是 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());
我尝试了解 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
时,你给它一个可调用对象作为第三个参数,模板参数是从函数参数推导出来的。
mySort
和 myClass()
是可调用对象;它们的类型分别是 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());