有没有类似"default comparator"的东西?

Is there something like a "default comparator"?

本文关键字:default 有没有 comparator      更新时间:2023-10-16

我写了一个模板来包装一个 std::vector 以确保向量始终排序:

template <typename T> class SortedVector{
public:    
    SortedVector(bool (*comparator)(T,T)=DefaultComparator<T>){
        this->comparator = comparator;
    }
    void insertValue(T newElement){            
        vect.insert(std::lower_bound(
           vect.begin(),vect.end(),newElement,comparator),newElement);
    }
private:
    std::vector<T> vect;
    bool (*comparator)(T,T);
};

我希望能够使用自定义比较器,但在大多数情况下,只需使用 T<运算符即可。但是,我没有找到比使用它更好的方法

template <typename T> bool DefaultComparator(T a,T b){return a<b;}

作为默认参数。

也许这是一个愚蠢的问题...难道没有更好的方法可以在不定义我自己的DefaultComparator的情况下获得相同的方法吗?

我不能使用 C++11。

没有标准的函数模板来做你想做的事情;但是有一个标准的函数模板,std::less 。如果要使用泛型函数对象,而不是将自己限制为函数指针,则很容易将其指定为默认值:

template <typename T, typename Comparator = std::less<T> > 
class SortedVector{
public:    
    SortedVector(Comparator comparator = Comparator()){
        this->comparator = comparator;
    }
    void insertValue(T newElement){
        // lower_bound accepts any suitable function object, so no change needed
        vect.insert(std::lower_bound(
           vect.begin(),vect.end(),newElement,comparator),newElement);
    }
private:
    std::vector<T> vect;
    Comparator comparator;
};

您可以使用类模板std::less<T>作为默认值。

template <typename T, typename C=std::less<T>>
class SortedVector
{
public:    
  SortedVector(C cmp=C()) : comparator(cmp)
  {
  }
  void insertValue(T newElement){            
    vect.insert(std::lower_bound(
       vect.begin(),vect.end(),newElement,comparator),newElement);
}
private:
    std::vector<T> vect;
    C comparator;
};
相关文章: