Компилятор выдает ошибку, поскольку в качестве параметра шаблона шаблона вводится тип. Предполагая, что специализация для любого N нежелательна, и она также должна использоваться с другими контейнерами (вектор и deque), которые формируются по-разному, правильный путь выглядит следующим образом:
template <class Container> // template <typename Container>
class disjoint_set{
private:
Container vertices;
Container root;
.
.
.
};
Без какой-либо специализации. Если disjoint_set
действительно не действует по-разному для каждого типа контейнеров.
И контейнер должен быть просто предоставлен во время строительства объектов, например:
disjoint_set<std::array<int, 56> > object1(...);
disjoint_set<std::vector<int> > object2(...);
disjoint_set<std::deque<int> > object3(...);
Удачи!