std :: set - 像我的容器中的函数对象支持

时间:2013-12-01 11:14:40

标签: c++ comparison containers function-object

我已经实现了自己的容器:

template<typename T>
class MyContainer
{
    // body where in some point 2 elements of collection are compared (-1, 0 and 1 possible comparison results)
};

我想要做的是添加对函数对象的支持,就像在std :: set中一样,可以像这样执行函数对象:

struct Comparator
{
    bool operator()(const char* s1, const char* s2) const
    {
        return strcmp(s1, s2) < 0;
    }
};

然后将其作为设置参数传递:

std::set<const char*, Comparator> SomeSet;

我不是每天都在使用C ++程序员,所以我需要帮助来实现这一目标。为了增加对此的支持,我该怎么办?我必须在MyContainer中创建字段以便在其中存储函数对象以在容器内的排序方法中使用它吗?

1 个答案:

答案 0 :(得分:0)

我通过添加默认模板值并定义默认比较类来解决它:

template<typename T, class Compare = DefaultTreeOrder<T>>
class MyContainer
{
    private:
        Compare compare;
    public:
        MyContainer()
        {
            compare = Compare();
        }
};

其中DefaultTreeOrder是:

template<typename T>
class DefaultTreeOrder 
{
    public:
        int operator()(T value1, T value2)
        {
            less<T> l;
            greater<T> g;

            if(l(value1, value2))
            {
               return 1;
            }
            else if(g(value1, value2))
            {
                return -1;
            }

            return 0;
        } 
};