使用copy_if
,count_if
等许多算法,我可以在需要谓词的地方互换使用函数或函子。
但是对于std::set
,我无法传递函数来代替它所采用的比较函数参数。在这种情况下,我必须传递一个仿函数。为什么它不接受某个功能呢?
bool myfunction (int lhs, int rhs) {
cout << "myfunction\n";
return true;
}
struct myfunctor {
bool operator() (const int& lhs, const int& rhs) const {
cout << "myfunctor\n";
return true;
}
};
std::set<int,myfunctor> first;
std::set<int,myfunction> second; // this does not compile.
答案 0 :(得分:4)
为什么不接受功能?
那是因为std::set
第二个模板参数应该是一个类型。具体来说,它应该是比较的仿函数类型。您正在传递一个函数(指针),它不是一个类型。