有没有类似 "default comparator" 的东西?
Is there something like a "default comparator"?
我编写了一个包含 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。
没有一个标准的函数模板可以做你想做的事;但是有一个标准函数 class 模板 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;
};
您可以使用 class 模板 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;
};
我编写了一个包含 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。
没有一个标准的函数模板可以做你想做的事;但是有一个标准函数 class 模板 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;
};
您可以使用 class 模板 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;
};