使用集合时,我想传递我自己的比较函数,它也有一个参数。如何做到这一点以及如何将该集合作为对其他函数的引用传递?
例如,我有一个 Comparator 类(具有 operator()
重载和私有(private)默认构造函数),它在构造函数中接受一个参数,该参数在进行比较时使用。它适用于排序算法,例如,
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 一起使用并将参数传递给比较对象? 以及如何将此集合作为对其他函数的引用传递,更具体地说,函数签名应该是什么?
谢谢。
最佳答案
如果您需要比较器中的参数,则需要使用函数对象。与您的类(class)相似的东西。我认为您需要使函数调用运算符成为 const
成员。你会像这样使用它:
std::set<MyObj, Comparator> myObjSet(Comparator(100));
关于c++ - 如何使用带参数化构造函数的类的比较对象来声明 STL 集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37838194/