函数和函数在priority_queue和某种C ++

如何解决函数和函数在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时,函数和函子有什么区别?

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

我也检查了sortpriority_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时,给它一个可调用对象作为第三个参数,并从函数参数中推导出模板参数。
mySortmyClass()是可调用的对象;它们的类型分别为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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?