有没有类似"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。
没有标准的函数模板来做你想做的事情;但是有一个标准的函数类模板,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;
};
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 遇到新行时,有没有办法停止istream_iterator
- 有没有一种方法可以在编译时获得作用域类名
- conan有没有办法导出一个空目录
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 有没有可能有一个只有ADL才能找到的非好友功能
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- catch框架有没有办法比较流或文件
- 有没有任务栏API可以立即应用注册表更改
- 有没有办法在初始化字符串时避免来自 clang-tidy(fuchsia-default-arguments)的警告?
- 有没有办法仅使用类的对象名称作为"default"成员?
- 有没有类似"default comparator"的东西?