如何使用比较器创建类?

时间:2013-10-06 10:48:23

标签: c++

如何创建一个采用std::less<T>std::equal_to<T>等比较模板的类,如std::multisetstd::set

3 个答案:

答案 0 :(得分:0)

template <class T, class Comparator = std::less<T>>
class MyClass
{
  //...
}

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

void MyClass::Myfun(X x, Comparator mycomp = Comparator())
{

  if (mycomp(data1,data2)) 
    //...

}

答案 1 :(得分:0)

这可能有所帮助:

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;

答案 2 :(得分:0)

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不包含任何状态的情况下,您应该使用私有继承来允许空基本优化来消除开销。