在运行时为 std::set 定义自定义比较器

Define custom comparator at run time for std::set

本文关键字:定义 自定义 比较器 set std 运行时      更新时间:2023-10-16

我需要帮助才能在运行时定义自定义标准::设置比较器。我知道如何定义具有固定值的基本比较器。我真的坚持如何在运行时做到这一点。我正在运行Visual Studio 2010,如果有帮助的话。

下面是我的代码:

#include <set>
struct CustomComp
{
    CustomComp():m_tolerance(0.1){}
    //Always assume tolerance >= 0.0
    CustomComp(double const &tolerance):m_tolerance(tolerance){}
    /*Only return true when the two number are sufficiently apart from each other*/
    bool operator()(double const &n1, double const &n2)
    {
        double diff = n1 - n2;
        if(diff < 0.0 && std::abs(diff) > m_tolerance) return true;
        if(diff > 0.0 && std::abs(diff) > m_tolerance) return false;
        return false;
    }
private:
    double m_tolerance;
};

int main(int argc, char **argv)
{
    /*This works */
    std::set<double, CustomComp> aaa;
    aaa.insert(0.0);
    aaa.insert(0.2);
    aaa.insert(0.3);
    aaa.insert(10.0);
    /*What I really want*/
    double tol = GetToleranceFromUser();
    std::set<double, CustomComp(tol)> bbb;
        return 0;
}

谢谢。

比较器作为参数传递给集合构造函数:

std::set<double, CustomComp> bbb(CustomComp(tol));