Чтобы ответить на ваш вопрос напрямую: чтобы сделать это, нужно начать с какого-то механизма копирования при записи - когда вы помещаете что-то в вектор, это должна быть копия оригинала (или, по крайней мере, действие как один). Например, если я вставлю карту в свой вектор, а затем удалю элемент с исходной карты, этот элемент все еще должен быть там в копии карты, которая была помещена в вектор.
Тогда он должен будет отслеживать все указатели и обеспечивать, чтобы указатель (в данном случае карта) оставался в силе до тех пор, пока все эти указатели сами не будут уничтожены. Это, безусловно, возможно сделать. Например, довольно много языков обеспечивают сборку мусора в основном по этой причине. Большинство из них изменяют семантику вещей, поэтому, когда / если вы (например) создаете вектор карт, помещение карты в вектор имеет ссылочную семантику - то есть, когда вы изменяете исходную карту, это должно изменить любую " копии "того, что вы положили в другие коллекции.
Как вы уже заметили, вы можете выполнить любое / все вышеперечисленное в C ++, если вы действительно этого хотите. Причина, по которой это не происходит сейчас, заключается в том, что большая часть стандартной библиотеки C ++ построена вокруг семантики значений, а не ссылочной семантики. Либо (в любом случае, IMO) - совершенно обоснованный и разумный подход - одни языки выбирают один, другие - другой. Либо / оба могут работать просто отлично, но семантика значений оказывается тем выбором, который был сделан в C ++.