Графы. Обход в глубину и динамические масивы
В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара).
Нужно сделать выборку номеров группы вместе с всеми ее подгруппами.
Как это правильно сделать?
Одним из вариантов решения вижу графы, обход в глубину.
Но не совсем четко представляю как реализовать их с динамическими масивами.
Имеется следующая задача:
В таблице в одном поле хранится номер группы, а во втором номер родительской группы для данной(если конкретизовать, то это группы товара).
Нужно сделать выборку номеров группы вместе с всеми ее подгруппами.
Как это правильно сделать?
Одним из вариантов решения вижу графы, обход в глубину.
Но не совсем четко представляю как реализовать их с динамическими масивами.
Сформулируй пожалуйста вопрос более четко - не понятно с чем собственно у тебя проблема - и причем здесь динамические массивы?
Сформулируй пожалуйста вопрос более четко - не понятно с чем собственно у тебя проблема - и причем здесь динамические массивы?
Мне нужно из таблицы базы данных сделать выборку по полям ID и PARENTID(номер группы и номер группы родителя соответсвенно).
Потом из этого набора данных мне нужно взять все ID подгрупп, которые входят в группу.
Нашел информацию, что это можно реализовать при помощи std::map, но не совсем понимаю как это делаеться. Опыта работы с STL нет. :(
Мне нужно из таблицы базы данных сделать выборку по полям ID и PARENTID(номер группы и номер группы родителя соответсвенно).
Потом из этого набора данных мне нужно взять все ID подгрупп, которые входят в группу.
Нашел информацию, что это можно реализовать при помощи std::map, но не совсем понимаю как это делаеться. Опыта работы с STL нет. :(
А оно нужно - так сложно делать? Для начала - глубина обхода - конечна или нет? Если конечна - чем определяется, если нет - то как проверить на какой глубине вложенности ты находишься? Второе - зачем использовать std::map - для меня это вовсе не очевидно - ведь ты делаешь выборку и значения у тебя и так загружены в датасет? Выборку можно сделать отфильтровав тот же датасет по PARENTID - в случае если все записи у тебя на клиенте или по селекту. Зачем же морочится с дополнительными мепами?
А оно нужно - так сложно делать? Для начала - глубина обхода - конечна или нет? Если конечна - чем определяется, если нет - то как проверить на какой глубине вложенности ты находишься? Второе - зачем использовать std::map - для меня это вовсе не очевидно - ведь ты делаешь выборку и значения у тебя и так загружены в датасет? Выборку можно сделать отфильтровав тот же датасет по PARENTID - в случае если все записи у тебя на клиенте или по селекту. Зачем же морочится с дополнительными мепами?
Глубина конечна(если я правильно понимаю применение этого термина в данном случае). Мне нужно выбрать все подгруппы до поконца вложености и наперед количество вложеностей неизвестно.
Если задачу больше конкретизоровать, то в таблице храниться информация о группах товара. Нужно для товаров всей группы и всех ее подгрупп поменять некоторые свойства...
Глубина конечна(если я правильно понимаю применение этого термина в данном случае). Мне нужно выбрать все подгруппы до поконца вложености и наперед количество вложеностей неизвестно.
Если задачу больше конкретизоровать, то в таблице храниться информация о группах товара. Нужно для товаров всей группы и всех ее подгрупп поменять некоторые свойства...
Ну стандартная задача построения дерева - и в твоем случае наверное стоило бы (ИМХО) ввести чтото типа признака наличия дочерних ветвей - будет проще. Ну а сама задача решается банальной рекурсией - т.е. меняешь свойства на последнем уровне и повторяешь до тех пор пока нужно. На sql.ru и ibase.ru есть несколько статей посвященных работе с деревьями (ссылки рыть облом - найти их не трудно) - посмотри, я думаю пригодится.
Ну стандартная задача построения дерева - и в твоем случае наверное стоило бы (ИМХО) ввести чтото типа признака наличия дочерних ветвей - будет проще. Ну а сама задача решается банальной рекурсией - т.е. меняешь свойства на последнем уровне и повторяешь до тех пор пока нужно. На sql.ru и ibase.ru есть несколько статей посвященных работе с деревьями (ссылки рыть облом - найти их не трудно) - посмотри, я думаю пригодится.
Спасибо за советы. Пошел искать на sql.ru и ibase.ru
Ну стандартная задача построения дерева - и в твоем случае наверное стоило бы (ИМХО) ввести чтото типа признака наличия дочерних ветвей - будет проще. Ну а сама задача решается банальной рекурсией - т.е. меняешь свойства на последнем уровне и повторяешь до тех пор пока нужно. На sql.ru и ibase.ru есть несколько статей посвященных работе с деревьями (ссылки рыть облом - найти их не трудно) - посмотри, я думаю пригодится.
Спасибо за направление в поиске. Помогла статья
http://gsbelarus.com/gs/modules.php?name=News&file=article&sid=314