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一起使用并将参数传递给比较对象?我如何将此集作为对其他函数的引用传递,更具体地说,函数签名应该是什么?
谢谢.
如果比较器中需要参数,则需要使用函数对象.类似于你班级的东西.我认为你需要让函数调用运算符成为一个const成员.你会用这样的东西:
std::set<MyObj, Comparator> myObjSet(Comparator(100));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |