std :: set — подобная поддержка объектов функции в моем контейнере

Я реализовал свой собственный контейнер:

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 для того, чтобы сохранить объект функции в нем, чтобы использовать его в моих методах сортировки внутри контейнера?

2

Решение

Я решил это, добавив значение шаблона по умолчанию и определив класс сравнения по умолчанию:

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;
}
};
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]