c++ - 如何使用带参数化构造函数的类的比较对象来声明 STL 集

标签 c++ c++11 stl containers

使用集合时,我想传递我自己的比较函数,它也有一个参数。如何做到这一点以及如何将该集合作为对其他函数的引用传递?

例如,我有一个 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/

相关文章:

c++ - 两个 std::vectors 指向几乎相同的数据,这可能吗

java - 请解释为什么在 Cpp、Java 和 C# 中允许或不允许将 List<A> 转换为 List<A.super>

c++ - 具有相似属性的不同数据类型的模板

c++ - 类型特征和未评估的上下文

c++ - std::vector 与一位读者和一位作者的多线程同步:仅在调整大小时锁定

c++ - std::set 推导指南没有像我预期的那样工作

c++ - 在 2 个 c 文件中包含头文件(包含变量定义)时没有构建错误

c++ - 始终使用智能指针是一种好习惯吗?

C++ 使用 'tweaked' 比较仿函数排序

c++ - 映射/设置迭代器不是可取消引用的 C++ 映射