Мне нужна карта -, подобная структуре данных (в C++ )для хранения пар (Key,T )со следующей функциональностью:
Что мне не нужно
Другими словами, у вас есть некоторая структура поиска, которую вы можете построить, но в любой момент вы можете перейти в историю и расширить более раннюю/другую версию структуры другим способом. Позже вы можете переключаться между этими разными версиями.
В моем проекте Key и T, скорее всего, будут целыми числами или значениями указателя, но не строками.
Основная цель состоит в том, чтобы уменьшить временную сложность; потребление пространства вторично (, но также должно быть разумным ). Чтобы уточнить, для меня log (N )+ log (S)(где N -количество элементов, S -количество снимков )было бы достаточно, хотя чем быстрее, тем лучше:)
У меня есть приблизительное представление о том, как это реализовать ---, например, :представляет собой структуру двоичного дерева поиска, вставка нового элемента может клонировать путь от корня до места вставки,сохраняя остальную часть дерева нетронутой. Переключение версий дерева было бы эквивалентно выбору другой версии корневого узла, для которого некоторые изменения просто не видны.
Однако, чтобы сделать это пользовательское дерево эффективным (, например. само-балансировка )потребует некоторых дополнительных усилий и тщательного кодирования. Конечно, я могу сделать это сам, но, возможно, для этого уже существуют библиотеки?
Кроме того, вероятно, существует правильное имя для такого типа структуры данных, которого я просто не знаю, что делает мои поиски в Google (или SO-поиски )полными неудачами...
Спасибо за помощь!