¿Cómo hago una estructura de datos de árbol en C++ que utiliza iteradores en lugar de punteros? No pude encontrar nada en el STL que pueda hacer esto. Lo que me gustaría hacer es ser capaz de crear y manipular árboles de esta manera:¿Cómo hacer un árbol en C++?
#include <iostream>
#include <tree>
using namespace std;
int main()
{
tree<int> myTree;
tree<int>::iterator i = myTree.root();
*i = 42;
tree<int>::iterator j = i.add_child();
*j = 777;
j = j.parent();
if (i == myTree.root() && i == j) cout << "i and j are both pointing to the root\n";
return 0;
}
Gracias, tree.hh parece ser justo lo que estaba buscando.
Si esto es para obtener el beneficio de una estructura de datos que contiene tipos índice arbitrarias, optimizado para la búsqueda y bueno en la inserción y luego considerar usando un mapa.
Un mapa es un contenedor asociativo que tiene garantías de rendimiento idénticas a las de un árbol: logarítmica de búsqueda, inserción logarítmica, deleción logarítmica, espacio lineal. Internamente, a menudo se implementan como árboles rojo-negro, aunque eso es no es una garantía. Sin embargo, como usuario de STL , todo lo que debe tener en cuenta son las garantías de rendimiento de los algoritmos y las estructuras de datos de STL . Si están implementados como árboles o los pequeños hombres verdes no deberían importar .
No estoy seguro de si un mapa es lo que necesito, pero gracias por la información. Recordaré usar mapas siempre que sea posible en lugar de implementar árboles.