这是代码。
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
int a = 1;
int b=2;
if(greater<int>(a,b))
cout<<"YES";
else
cout<<"NO";
}
当我编译它时,错误消息是:错误C2661:“std :: greater&lt; _Ty&gt; :: greater”:没有带有两个参数的重载函数。这很令人困惑,它应该采取两个参数,对吗?
我使用更高的排序算法,它工作得非常好。但我不知道上述程序中的错误信息是如何产生的。
答案 0 :(得分:5)
它将以这种方式工作:
int a = 1;
int b=2;
greater<int> g;
if(g(a,b))
cout<<"YES";
else
cout<<"NO";
答案 1 :(得分:3)
std::greater
的比较功能是通过其operator()
或函数调用运算符完成的。随你而去
greater<int>(a,b)
您正在创建一个greater<int>
对象而不进行比较。该错误实际上表示没有构造函数接受两个int
,因为您正在尝试创建它的对象。
首先创建一个greater<int>
对象,然后使用其函数调用运算符
greater<int>()(a, b)
// |/|----|
// | |
// | |- Then call greater<int>::operator() which does the comparison
// |- Create a temporary greater<int> object
答案 2 :(得分:1)
按以下方式编写
if(greater<int>()(a,b))
要比较值类std :: greater使用其运算符函数