如何使用比较器创建类
How to create class with comparator?
如何
创建一个采用比较器模板(如std::less<T>
)或std::equal_to<T>
(如std::multiset
和std::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
不包含任何状态的情况下消除开销。
相关文章:
- std::设置自定义比较器
- C++中"std::sort"比较器的不同类型
- 将 std::set 与基于键的比较器一起使用
- 带自定义比较器的最小优先级队列
- 函数类作为比较器
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- set_intersection使用自定义设置比较器
- 如何为集合 c++ 建立比较器
- C++复杂情况的比较器通过参数问题
- 用于基于成员字段或函数创建比较器的快捷方式
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- 为 map<int、pair<int、int 创建比较器>>
- 如何以自定义类/比较器作为密钥创建地图
- 为指针后面的对象创建比较器的通用方法
- 如何使用比较器创建类
- 如何创建一个接受比较器的类(对于最大堆和最小堆)
- 如何在C++中创建带有自定义比较器的std::set
- 如何在qt中创建一个图像比较器?