Поскольку вы хотите быть универсальным в типе контейнера, самое близкое, что я смог найти (если я хорошо понимаю ваши намерения), это:
template <template <typename, typename> class Map>
struct my_class
{
typedef typename Map<std::string, my_class>::type map_t;
map_t children;
};
// Since the standard doesn't allow default arguments to be
// taken into account for template template parameters, we
// have to close them.
// Write one such structure for each map type you want.
struct std_map
{
template <typename Key, typename Value>
struct rebind { typedef std::map<Key, Value> type; }
};
и используйте
my_class<std_map::rebind> problematic_tree;