У меня есть алгоритм красного черного дерева, который работает нормально.Когда узел вставляется в дерево, метод insert () возвращает вызывающей стороне указатель на вставленный узел.Я храню все такие указатели в векторе STL.
Проблема заключается в том, что в работе дерева RB иногда эти указатели становятся недействительными.Например, есть метод, который вызывается во время rotateleft / right, который копирует значения узла A в текущий узел и затем удаляет узел A. Ну, у меня был указатель на узел A в этом векторе, который теперь недопустим.
Я думал о способе обновления указателей в векторе следующим образом:
1) сохранял мультикарту, которая отображает указатели узлов на индексы векторов, которые содержат эти указатели.
2) Перед удалением узла, проверьте эту мультикарту, чтобы найти все точки в векторе, на которые это повлияет
3) итерируйте по вектору и измените старый указатель на новый указатель
4) Обновите значение ключа в мультикарте, чтобы оно также отражало новый указатель.
Проблема в том, что вы не можете обновить значение ключа коллекции карт по очевидным причинам.Также это кажется ужасным решением как по сложности, так и по причинам реализации.Любые идеи о том, как я могу выполнить это динамическое обновление указателей?