Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > хранилище для элементов дерева


Автор: Vitaly 26.10.2004, 13:41
Приветствую всех участников форума.
Мне нужен совет.
В программе на VC++ в tree control нужно выводить дерево примерно следующего вида:
мир-
Африка
Евразия
Юж. Америка
......
Антарктида
Сев. Америка -----США
.......
Канада----
Монреаль
.....
Торонто
Это только прмер:) Кол-во элементов в каждой ветке может изменяться в зависимости от файла.

Как лучше сохранить эти данные? Многомерный массив -- нерационально, ...?

Я написал класс ветки с параметрами : имя элемента, его начало в файле, длина. Думаю стоит
добавить член указывающий на родителя данной ветки и создавать одномерные массивы таких классов. Например (массив 1 - континенты, 2-й страны, и т.д.)
А как думаете вы?
Спасибо.




Автор: Step 26.10.2004, 13:59
я использывал std:map, и пихал туда свою структуру, название, указатель на мап нижнего уровня и позиция.
в результате получилось что я легко мог модифицировать дерево вытаскивая позицию из ассоциативного массива по названию пункта

а для сохранения потом можно использовать сохранения памяти структур... если чучуть помучаться можно вообще структуру переделать в классный класс который будет все делать за тебя...

Автор: Vitaly 26.10.2004, 15:23
А можно подробнее про std:map?
что это? Или линк об этом?

Автор: Step 26.10.2004, 15:27
Vitaly, про это у нас на форуме куча тем, просто используйте поиск...

мап хорошо, на мой вгляд, использовать для работы с деревом..... и если его приминить к хорошо продуманой структуре то можно организовать и сохранение данных...
Добавлено @ 15:36
еще в факю у нас что-то было или про стл или про мап, немпомню, зайдите туда

Автор: Mad 26.10.2004, 16:00
Step
Опять вы все усложнаете :)
TreeControl и так хранит все дерево :)

Автор: Step 26.10.2004, 16:08
Mad, только работать с ним не удобно... постоянно нужно хранить позиции либо их искать... вот я предлагаю хранить это в мапе
Добавлено @ 16:10
Mad, давайте свои идеи.... интересно ведь....

и давайте на ты

Автор: Mad 26.10.2004, 16:42
Step
Как работать с деревом зависит от того, какие операции пользователя подразумеваются :)

Vitaly
Опиши поподробней, че юзер у тя делать то с этим деревом будет ?

Автор: Vitaly 27.10.2004, 09:37
Цитата(Mad @ 26.10.2004, 16:42)
Step
Как работать с деревом зависит от того, какие операции пользователя подразумеваются :)

Vitaly
Опиши поподробней, че юзер у тя делать то с этим деревом будет ?

Есть файл (~90 MB ASCII), каждая строка 132 байта.
В этой строке информация записана по определенному стандарту.
Т.Е. 1-й символ например обозначает планету(он во всех стоках первый и длина его 1 символ)
например Земля(буква З); далее со 2-го по 4-й символ идет код зоны (ЕВР - Европа,
АФР-африка и т.д.) , после страна (АНГ-Англия), города и т.д.

Так вот, программа должна построить дерево файла для облегчения понимания информации в нем
находящейся. Второй этап - это пользователь щелкнув правой кнопкой мыши может перенести
любую ветку с нужной инфой например в Excel, Oracle и т.д.
Я думаю что такой интерфейс будет удобнее чем работать с этим текстовым файлом.
Если кого интерисует формат файла так это ARINC - 424. При желании могу скриншот показать.:)

Автор: Mad 27.10.2004, 12:31
Vitaly
Дополнительной структуры для хранение данных тебе, в данном слючае, не надо.
При правом клике можно получить HTREEITEM, по которому кликнули, и от него вытянуть как родителей, так и детей.
CTreeCtrl::GetParentItem вернет родительский элемент
CTreeCtrl::GetNextItem предаеш TVGN_CHILD для получения первого дитя, затем TVGN_NEXT для последовательного получения всех детей.

Автор: Vitaly 27.10.2004, 15:19


Цитата(Mad @ 27.10.2004, 12:31)

Дополнительной структуры для хранение данных тебе, в данном слючае, не надо.


Спасибо Mad думаю так действительно попроще будет :)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)