通过函数传递自定义比较器
Pass a custom comparator through a function
我有一个带函数的类
MyClass::doStuff(std::vector<MyCustomData*> toSort) { ...
我在其中打电话
std::sort(toSort.begin(), toSort.end(), MyClass::SortByZ());
myClass::SortByZ() 是一个自定义比较器。现在这有效,但我想实现以下目标:
我有几个类,每个类都应该有自己的比较器函子来对"MyCustomData"进行排序。所以例如1级...应该有
class Class1 {
struct SortData {
bool operator ()(MyCustomData *lhs, MyCustomData *rhs) {
return lhs->something1 > rhs->something1;
}
};
//...many more functions/vars
}
而 Class2 对相同的数据类型具有不同的比较器函子,例如
class Class2 {
struct SortData {
bool operator ()(MyCustomData *lhs, MyCustomData *rhs) {
return lhs->something2 > rhs->something2;
}
};
//...many more functions/vars
}
现在我希望能够调用函数MyClass::d oStuff(...)
doStuff(myData, Class1::SortData)
或
doStuff(myData, Class2::SortData)
函数 MyClass::d oStuff(...) 应该使用相应的排序顺序。
我没有找到这样做的方法,有吗?我想要一个简单的解决方案(不必支持模板或任何东西)。如果需要,我愿意使用 boost,但最好不要使用增强的解决方案。
我希望我能够描述我想要实现的目标?感谢您的任何帮助!
你必须
doStuff
做一个模板:
template <typename Comparator>
void doStuff(std::vector<MyCustomData*> toSort, Comparator compare) {
// ...
std::sort(toSort.begin(), toSort.end(), compare);
// ...
}
此外,它可能希望通过引用获取第一个参数。照原样,它将对参数的副本进行排序,丢弃该副本,并保持调用方的向量不变;虽然也许这就是你想要的。
使用函数模板,以便接受任何类型的比较函数(或函子):
template <typename Comparator>
void doStuff(std::vector<MyCustomData> toSort, Comparator comparator)
{
...
std::sort(toSort.begin(), toSort.end(), comparator);
...
}
...
doStuff(myData, Class1::SortData());
doStuff(myData, Class2::SortData());
这就是标准算法提供通用性的方式。
相关文章:
- std::设置自定义比较器
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- 使用迭代器的自定义比较器函数
- Cython中带有自定义比较器的优先级队列
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 为什么在类或结构中传递自定义比较器函数?
- 在priority_queue中使用默认容器但自定义比较器
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- C++ priority_queue与自定义比较器并删除任何项目
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- 通过函数指针对类内的 STL SET 使用自定义比较器
- 基于对象的两个属性的自定义比较器会引发异常
- 如何使用自定义比较器初始化类数据成员,该成员是 std::set
- 标准::set_intersection 带自定义比较器
- 使用自定义比较器C++映射,不插入所有元素
- 优先队列的自定义比较器
- C++ STL . 自定义比较器如何工作?