【发布时间】:2014-08-22 10:16:27
【问题描述】:
我想为std::set 使用我自己的比较器,它需要将参数传递给它的构造函数:
template <class T = double> class EpsCompare {
public:
EpsCompare(T input_eps) : _eps(input_eps) {};
bool operator() (const T & element1, const T & element2) const {
return ( round(element1*_eps) < round(element2*_eps) );
}
T _eps;
};
如何将它传递给我的设置数据类型的声明?我想做这样的事情:
std::set<double, EpsCompare<double>(1e-5)> myEpsSet;
这不编译,那还能怎么办呢?
【问题讨论】:
-
将实例传递给构造函数:en.cppreference.com/w/cpp/container/set/set
-
你会被这个比较器烧死。绝不。曾经。曾经。采用。一个。厄普西隆。什么时候。排序。数字。永远。
-
@n.m.为什么?而且我什至不认为这是典型意义上的 epsilon。
-
@Angew 你说得对,这不是通常的模糊比较,我的眼睛看到他们想要什么,而不是写什么:(至于为什么,模糊比较不是严格的弱排序,所以通常的算法是行不通的。想象一下一个数字序列,每个数字都在下一个 epsilon 之内,但极端情况还很遥远;你会如何对它们进行排序?
-
第二个要设置的模板参数应该是一个合适的类,这里是一个类的实例(但不是一个类本身)
标签: c++ stl argument-passing functor default-constructor