Qual estrutura de dados é mais adequada para o VirtualStringTree?

Eu acho que todos que já usaram o VirtualStringTree do Delphi concordarão que é um ótimo controle. É um controle "virtual" (seus dados devem ser mantidos em outro lugar), então eu estava pensando qual estrutura de dados é a mais adequada para essa tarefa? OMI que a estrutura de dados deve suportar hierarquia, deve ser rápida e facilmente expansível. A implementação mais fácil seria usar um registro e é isso que sugere a maior parte da documentação que pode ser encontrada. Mas e se você precisar fazer algumas pesquisas rápidas, calcular totais etc.? Qual estrutura de dados você está usando junto com o VirtualStringTree?

EDIT1: Estou usando o Delphi 2010.

OK, tentarei dar mais detalhes sobre meus requisitos. O tamanho dos dados pode ser muito variável, de 1 a milhares de itens. Cada item pode conter várias cadeias de caracteres, valores inteiros. Preciso de acesso aleatório, meus dados podem mudar várias vezes durante a vida útil do aplicativo. Bom desempenho é muito desejável. Também preciso salvar e recarregar dados.

EDIT2: Tenho 1 resposta, então tentarei comentar minha opinião. Obrigado, Dorin, pela sua resposta, mas não acho que sua estrutura seja muito conveniente. 1) Não lida com hierarquia. 2) Ter TStringList ou TList separados para cada nó não é um IMO muito eficaz. Com essa implementação, só posso procurar os dados do nó atual, mas não posso pesquisar efetivamente em toda a árvore.

Eu acho que essa estrutura de dados deve ser como uma árvore. Ele deve ter nós com capacidade para adicionar filhos. Então, eu apenas poderia obter os dados do nó no evento OnInitNode, verificar se meu nó tem alguns filhos, definir o sinalizador ivsHasChildren, se houver, e no evento OnInitChildren, definir a contagem correta de filhos. Posteriormente, no evento OnGetText, eu poderia buscar os dados necessários da estrutura do nó e configurá-los para CellText com base no índice da coluna. Minha idéia é ter uma estrutura de dados separada e executar todas as operações necessárias sem a necessidade de usar o VirtualStringTree. Espero que alguém entenda meu ponto :).

EDIT3: Encontrei uma unidade JclTrees bastante interessante que, à primeira vista, poderia ser usada para alcançar o que estou procurando. Isso pertence aJCL biblioteca. A falta de documentação decente dificulta a rápida investigação de sua funcionalidade. Provavelmente examinarei mais profundamente quando tiver mais tempo.

questionAnswers(3)

yourAnswerToTheQuestion