Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80

Дерево с узлами трёх разных типов

24.07.2017, 20:14. Показов 4286. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется реализовать произвольное дерево, где каждый узел может быть строкой, целым или вещественным числом, и иметь любое количество детей, также одного из этих трёх типов (дети могут иметь разный тип). При разработке класса для узла у меня возникли две идеи, как это сделать:
1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
class tree_node
{
    using value_type = typename std::enable_if
        <
            std::is_same<std::string, T>::value ||
            std::is_same<int, T>::value ||
            std::is_same<float, T>::value, T
        >::type;
    value_type data;
    std::vector<??????> children;// Что за тип здесь должен быть?
public:
...
2)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
struct node_data {};
struct str_node: public node_data
{
    std::string data;
    str_node(std::string &str): data(str) {};
};
struct int_node: public node_data
{
    int data;
    int_node(int n): data(n) {};
};
struct float_node: public node_data
{
    float data;
    float_node(float f): data(f) {};
};
 
class tree_node
{
    std::shared_ptr<node_data> val;
    std::vector<std::shared_ptr<node_data>> children;
public:
....
//Поскольку для подклассового полиморфизма нужно работать с указателями решил заодно 
//использовать кучу, а затем, чтобы не писать сложный деструктор, обернул в умные 
//указатели. Ввиду того, что шаблоны использовать нельзя, приходится писать многие методы 
//в трёх экземплярах, соответственно смысла в полиморфизме мало.
Существует ли изящное решение (например, какие-нибудь шаблоны проектирования) данной задачи?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2017, 20:14
Ответы с готовыми решениями:

Бинарное дерево с повторяющимися узлами - как их найти?
Всем добрый вечер. Сейчас сижу и сам пытаюсь понять тему связанную с деревьями, но возникла тупиковая ситуация, может даже какое то...

массив-текстБокс/Сортировка/текстБокс -массив(вызвать для трех разных типов)
Всем доброго времени суток! Заполняю массив элементов типа int из textBox1. Уже чем только не пробовал числа какие-то левые выводит в...

Создать массивы разных типов(3 типов), вывести их на экран
Создать массивы разных типов(3 типов), вывести их на экран.

21
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
25.07.2017, 17:18  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от vndtta Посмотреть сообщение
а почему не сделать через std::type_info
вроде меньше писанины выходит
тут и в контейнер запихать можно все подряд
1) Я так понимаю, val всё-таки имеет тип value_type.
2) Отсутствует vector<std::unique_ptr<Elbase>> в классе Elem или Elbase (а как без него детей хранить)? Тоже опечатка, думаю.
3) Все методы, связанные с переменной val, непонятно как вызывать, через указатель на Elembase.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.07.2017, 19:45
Цитата Сообщение от VergilYamato Посмотреть сообщение
Существует ли изящное решение (например, какие-нибудь шаблоны проектирования) данной задачи?
http://en.cppreference.com/w/cpp/utility/variant
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.07.2017, 19:45

Бинарное дерево с использованием ссылочных типов
Здравствуйте! Я продолжаю изучение Пролога в универе (работаю на прологе 7.5). Задали задание реализовать бинарное дерево с помощью...

Хранение разных типов
Приветствую всех. Возник вот такой вопрос. У меня есть, например, 3 разных структуры, каждая из которых имеет разные поля: struct one ...

Матрица из разных типов
хочу создать клас Matrix елементы обьектов которого могли бы быть разных типов. была идея создать клас Cell и определить его как...

Коллекции разных типов
Добрый день! Подскажите, пожалуйста! Необходимо создать класс, который будет читать данные из файла 1. Про коллекцию объектов...

Массив разных типов
Подскажите пожалуйста!Ситуация следующая: Есть масив с числами int arr_id; Есть масив с строками: string str_answers; Мне нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru