Основная проблема, о которой вы спрашиваете, заключается в том, что более общее решение не является лучшим для конкретной проблемы.Это просто средний показатель для всех, но не самый лучший.
Хорошо, вы можете сохранить список в графе, предполагая его вырожденность, но почему вы должны делать что-то подобное?И как бы вы сохранили хэш-карту внутри графика?Зачем вам нужна такая структура?
И не забывайте, что реализация графа должна быть выбрана в соответствии с тем, какие операции вы собираетесь над ней делать, иначе это будет все равно, что использовать хеш-таблицу для хранения списка значений.или список для хранения упорядоченной коллекции вместо дерева.Вы знаете, что вы можете использовать матрицу смежности, список ребер или списки смежности ... каждая реализация имеет свои сильные и слабые стороны.
Тогда графы могут иметь действительно много свойств по сравнению с другими коллекциями данных, циклически,ациклический, направленный, ненаправленный, двудольный и т. д. и для любого конкретного случая вы можете реализовать их по-другому (предполагая некоторую гипотезу на нужном вам графике), поэтому их использование в собственном синтаксисе будет излишним, так как вам потребуетсяв любом случае сконфигурируйте их (и язык должен обеспечивать множество реализаций / оптимизаций).
Если все уже сделано, вы убираете удовольствие от разработки :) Кстати, просто ищите язык, который позволяет вам писать свой собственный граф DSLи жить с этим!