如何解决函数和函数在priority_queue和某种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,greater<int>()> bb;
//(3) priority_queue<int,myClass> cc;
//(4) priority_queue<int,mySort> dd;
vector<int> check={1,2,3,4,5,6,7};
//(a) sort(check.begin(),check.end(),mySort);
//(b) sort(check.begin(),myClass);
//(c) sort(check.begin(),myClass());
return 0;
}
我发现只有(1),(3)和(a),(c)有效。
使用sort和priority_queue时,函数和函子有什么区别?
我知道函子可以保持其状态,但是在这种情况下,此信息无关。
我也检查了sort和priority_queue,但听不懂。
你能帮我吗?
解决方法
实例化priority_queue
时,第三个参数必须是类型。greater<int>
和myClass
是类型; greater<int>()
和mySort
不是。
如果您创建默认的priority_queue
,它将默认初始化所指示类型的顺序。
priority_queue<int,vector<int>,greater<int>> aa;
等同于
priority_queue<int,greater<int>> aa(greater<int>());
和
priority_queue<int,myClass> cc;
等同于
priority_queue<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(),mySort);
和
sort(check.begin(),myClass());
等同于
sort<vector<int>::iterator,myClass>(check.begin(),myClass());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。