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

时间:2016-06-15 14:23:26

标签: c++ c++11 stl containers

使用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一起使用并将参数传递给比较对象? 我如何将此集作为参考传递给其他函数,更具体地说,应该是什么函数签名?

谢谢。

1 个答案:

答案 0 :(得分:6)

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

std::set<MyObj, Comparator> myObjSet(Comparator(100));