¿Qué estructura de datos es la más adecuada para VirtualStringTree?

Supongo que todos los que alguna vez usaron VirtualStringTree de Delphi estarán de acuerdo en que es un gran control. Es un control "virtual" (sus datos deben guardarse en otro lugar), así que estaba pensando qué estructura de datos es la más adecuada para tal tarea. En mi opinión, la estructura de datos debe admitir la jerarquía, debe ser rápida y fácilmente expandible. La implementación más fácil sería usar un registro y eso es lo que sugiere la mayor parte de la documentación que se puede encontrar. Pero, ¿qué pasa si necesita hacer algunas búsquedas rápidas, calcular totales, etc.? ¿Qué estructura de datos está utilizando junto con VirtualStringTree?

EDITAR1: Estoy usando Delphi 2010.

OK, intentaré dar más detalles sobre mis requisitos. El tamaño de los datos puede ser muy variable, de 1 a miles de elementos. Cada elemento puede contener múltiples cadenas, valores enteros. Necesito acceso aleatorio, mis datos pueden cambiar muchas veces durante la vida útil de la aplicación. El buen rendimiento es muy deseable. También necesito guardar y recargar datos.

EDIT2: Tengo 1 respuesta, así que intentaré comentar mi opinión. Gracias, Dorin por tu respuesta, pero no creo que tu estructura sea muy conveniente. 1) No trata con la jerarquía. 2) Tener una TStringList o TList separada para cada nodo no es una OMI muy efectiva. Con esta implementación solo puedo buscar los datos del nodo actual, pero no puedo buscar efectivamente en todo el árbol.

Creo que esta estructura de datos debe ser como un árbol. Debe tener nodos con capacidad para agregar hijos. Entonces podría obtener los datos del nodo en el evento OnInitNode, verificar si mi nodo tiene algunos hijos, establecer el indicador ivsHasChildren si es así, luego en el evento OnInitChildren establecer el recuento de niños correcto. Más tarde, en el evento OnGetText, podría obtener los datos necesarios de la estructura de mi nodo y establecerlos en CellText según el índice de la columna. Mi idea es tener una estructura de datos separada y hacer todas las operaciones necesarias con ella sin necesidad de usar VirtualStringTree. Espero que alguien haya entendido mi punto :).

EDITAR3: He encontrado una unidad JclTrees bastante interesante que a primera vista podría usarse para lograr lo que estoy buscando. Pertenece aJCL biblioteca. La falta de documentación decente hace que sea difícil investigar rápidamente su funcionalidad. Probablemente lo profundice cuando tenga más tiempo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta