使用set时,我想传递自己的比较函数,它也需要一个参数。怎么做以及如何将该集作为参考传递给其他函数?
例如,我是比较器类(带有operator()
重载和私有默认构造函数),它在构造函数中获取一个参数,该参数在进行比较时使用。它适用于排序算法,如
sort(myVector.begin(), myVector.end(), Comparator(10));
但是如何使用带参数的比较器对象声明一个集合。
我已尝试过这些语法
std::set< MyObj, bool(*)(const MyObj&, const MyObj&)> myObjSet(Compatrator(100));
现在当我插入myObjSet.insert(MyObj(0))
时,它会将错误视为Error: "left of '.insert' must have class/struct/union"
现在我宣布设为,
std::set< MyObj, Comparator(int)> myObjSet;
它给出错误&#34;函数返回功能&#34;。
class Comparator
{
int m_cmpParameter;
Comparator();
public:
~Comparator();
Comparator(int pCmpParam):m_cmpParameter(pCmpParam){}
bool operator()(const MyObj& pObjA, const MyObj& pObjB);
};
在我的项目中,这个类用于STL容器所需的所有比较。如何将此Comparator类与Set一起使用并将参数传递给比较对象? 我如何将此集作为参考传递给其他函数,更具体地说,应该是什么函数签名?
谢谢。
答案 0 :(得分:6)
如果比较器中需要参数,则需要使用函数对象。类似于你班级的东西。我认为你需要让函数调用运算符成为const
成员。你可以使用这样的东西:
std::set<MyObj, Comparator> myObjSet(Comparator(100));