【发布时间】:2016-06-15 14:23:26
【问题描述】:
使用集合时,我想传递我自己的比较函数,该函数也接受一个参数。如何做到这一点以及如何将该集合作为引用传递给其他函数?
例如,我有一个比较器类(带有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;
它给出了“函数返回函数”的错误。
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 一起使用,并将参数传递给比较对象? 以及如何将此集合作为对其他函数的引用,更具体地说,函数签名应该是什么?
谢谢。
【问题讨论】:
标签: c++ c++11 stl containers