仿函数
一般仿函数(又称函数对象)都是用来给一些库函数传入Compare方法的,最常用的是
// 自定义比较函数对象
struct Compare {
bool operator()(const int& a, const int& b) const {
return a > b; // 降序排序
}
};
int main() {
// 创建一个set,使用函数对象Compare作为比较函数
set<int, Compare> myset;
int arr[] = {4, 2, 1, 5, 3};
int n = sizeof(arr) / sizeof(arr[0]);
//用sort对任意容器排序
sort(arr, arr + n, Compare());
return 0;
}
我的疑惑是仿函数是怎么被使用的呢?为什么set<int, Compare>
里Compare不加括号,而sort(arr, arr + n, Compare())
函数里的Compare要带括号?其次是既然普通函数也能被当比较函数,为什么要用仿函数?
1. 加不加()问题
-
sort(arr, arr + n, Compare())
里的Compare()
其实是创建了Compare类的一个匿名对象,将这个对象作为参数传入了sort函数
-
set&l