std::set выбирает меньше или больше компаратора во время выполнения

Я рефакторил некоторый код и обнаружил, что есть два места, которые могут быть написаны с одним и тем же кодом, за исключением того, что компаратор набора lessв в одном месте и больше<двойное>в другом. Что-то вроде:

double MyClass::Function1(double val)
{
    std::set<double, less<double> > s;
    // Do something with s
}

double MyClass::Function2(double val)
{
    std::set<double, greater<double> > s;
    // Do the same thing with s as in Function1
}

Итак, я подумал сделать:

double MyClass::GeneralFunction(double val, bool condition)
{  
    if(condition)  
    {  
        // Select greater as comparator  
    }  
    else
    {  
        // Select less as comparator  
    }  

    set<double, comparator> s;  
    // common code
}

Я заставил это работать, используя свои собственные функции компаратора, например:

bool my_greater(double lhs, double rhs)
{
    return lhs > rhs;
}

bool my_less(double lhs, double rhs)
{
    return lhs < rhs;
}

double MyClass::GeneralFunction(double val, bool condition)
{ 
    typedef bool(*Comparator) ( double,  double);
    Comparator comp = &my_less;
    if (condition)
    {
        comp = &my_greater;
    }

    std::set<double, Comparator > s(comp);  

    //....
}

Но я хотел бы использовать встроенные. Проблема в том, что я не знаю, как объявить компаратор и назначить ему встроенные предикаты.

Будем признательны за любую помощь.

5
задан MikMik 25 June 2012 в 07:38
поделиться