我正在考虑一般情况,以下只是遇到的一个简单示例,虽然易于处理但却引起了我的想法。
例如,我正在使用sort()
的{{1}}函数。
而不是将函数定义为
<algorithm>
和
bool cmp (int n1, int n2)
{
return n1 > n2;
}
在主函数中,我想知道是否可以将指针传递给运算符sort (arr, arr + N, cmp);
,就像将指针传递给函数,排序函数一样。如果是这样,我该如何实施?
答案 0 :(得分:43)
您无法获得指向内置运算符的指针。但是幸运的是,标准库为所有标准运算符提供了功能对象。在您的情况下,该对象的名称为std::greater
:
sort (arr, arr + N, std::greater<int>{});
自C ++ 14起,您甚至可以省略参数类型,并将根据对象的使用方式推论得出:
sort (arr, arr + N, std::greater<>{});
从C ++ 17开始,空的<>
也可以省略:
sort (arr, arr + N, std::greater{});
答案 1 :(得分:4)
您不能这样做,但是可以在排序内部直接使用lambda,或者如果需要将比较器传递给它,则可以将lambda本身存储在变量中
sort (arr, arr + N, [](int a, int b){ return a > b; });
或
auto comp = [](int a, int b){ return a > b; };
sort (arr, arr + N, comp);
或根据建议,您可以使用std::greater
sort (arr, arr + N, std::greater<>{});