如何使用比较器创建类

How to create class with comparator?

本文关键字:创建 比较器 何使用      更新时间:2023-10-16
如何

创建一个采用比较器模板(如std::less<T>)或std::equal_to<T>(如std::multisetstd::set)的类?

这可能会有所帮助:

template <class T, class Comparator = std::less<T>>
class MyClass
{
  bool compare(const T& lhs, const T& rhs) const { return Comparator()(lhs, rhs); }
  // stuff
};
class A
{
public:
    bool operator < (const A& rhs) const;
};
MyClass<A> myClass;
template <class T, class Comparator = std::less<T>>
class MyClass
{
  //...
}

在成员函数中,类似于:-

void MyClass::Myfun(X x, Comparator mycomp = Comparator())
{
  if (mycomp(data1,data2)) 
    //...
}

STL 容器实际上存储比较器的一个实例,所以你想要的更接近于这个:

template <class T, class Comparator = std::less<T>>
class MyClass : private Comparator
{
public:
    MyClass() {}
    MyClass( const Comparator& compare ) : Comparator( compare ) {}
    bool compare(const T& lhs, const T& rhs) const
    {
        return static_cast<Comparator>(*this)(lhs, rhs);
    }
    // stuff
};
class A
{
public:
    bool operator < (const A& rhs) const;
};
MyClass<A> myClass;

请注意,应使用私有继承来允许空基优化在Comparator不包含任何状态的情况下消除开销。