如何使用参数化构造函数声明具有类对象的STL Set

Bit*_*ght 1 c++ containers stl c++11

当使用集合时,我想传递我自己的比较函数,它也需要一个参数.如何做到这一点以及如何将该集作为参考传递给其他函数?

例如,我有Comparator类(带有operator()重载和私有默认构造函数),它在构造函数中接受一个参数,在进行比较时使用.这与排序算法,如,

sort(myVector.begin(), myVector.end(), Comparator(10));
Run Code Online (Sandbox Code Playgroud)

但是如何使用带参数的比较器对象声明一个集合.

我试过这些语法,

std::set< MyObj, bool(*)(const MyObj&, const MyObj&)>   myObjSet(Compatrator(100));
Run Code Online (Sandbox Code Playgroud)

现在当我插入时myObjSet.insert(MyObj(0)),它会给出错误Error: "left of '.insert' must have class/struct/union"

现在,当我宣布设置为,

std::set< MyObj, Comparator(int)> myObjSet;
Run Code Online (Sandbox Code Playgroud)

它给出了"函数返回函数"的错误.


class Comparator
{
    int m_cmpParameter;
    Comparator();

public:

    ~Comparator();
    Comparator(int pCmpParam):m_cmpParameter(pCmpParam){}

    bool operator()(const MyObj& pObjA, const MyObj& pObjB);
};
Run Code Online (Sandbox Code Playgroud)

在我的项目中,我有一个类用于STL容器所需的所有比较.如何将此Comparator类与Set一起使用并将参数传递给比较对象?我如何将此集作为对其他函数的引用传递,更具体地说,函数签名应该是什么?

谢谢.

Die*_*ühl 6

如果比较器中需要参数,则需要使用函数对象.类似于你班级的东西.我认为你需要让函数调用运算符成为一个const成员.你会用这样的东西:

std::set<MyObj, Comparator> myObjSet(Comparator(100));
Run Code Online (Sandbox Code Playgroud)