В https://github.com/erikerlandson/st_tree вы найдете хороший шаблон для создания деревьев, например, вы можете написать:
tree<string, ordered<> > t;
t.insert("A");
// Insert strings at ply 1
node_iterator c = t.root().insert("C");
t.root().insert("B");
t.root().insert("D");
// Insert strings at ply 2
c->insert("F");
c->insert("E");
Вы можете выбрать между упорядоченным (с использованием мультимножества), необработанным (с использованием вектора) иключевой узел (используя карту), каждый узел содержит некоторые данные, которые также являются ключом для упорядоченного и ключевого узла.Невозможно создать дерево со смешанным типом узлов.Я хочу создать альтернативный шаблон, в котором узлы не всегда содержат данные, а просто являются держателем для некоторых дочерних элементов, а также допускают некоторое смешение.Упрощенный пример может быть:
tree t;
t.iterator it=t.insert(new node<raw_no_data<>>);
t.iterator it2=it->insert(new node<ordered_no_data<string>>); //indicating that its childs
//data should be string;
t.iterator it3=it->insert(new node<keyed_no_data<string>>);
it2->insert(new node<leave,string>(“B”));
it3->insert(new node<leave_key,string,int>(“D”,5));
node_base &n1=t[0].find(“B”); //looking in multiset
node_base &n2=t[1].find(“D”); //looking in map
Другими словами, в более общем случае я хочу иметь возможность доступа к узлу, подобному этому: mynode = t [2] [0] ["cat"] [1];Где дерево - это сочетание упорядоченных и необработанных узлов, и где у нас нет _данных для дочерних узлов необработанного узла.Существует ли что-то подобное уже с открытым исходным кодом?Если нет, я постараюсь создать такой проект и загрузить его на GitHub.