Можно подумать, что extract
(и соответствующий insert
) «магическим образом» изменяет тип элемента карты, на который влияют: когда элемент принадлежит карте, он имеет тип std::pair<const key_type, mapped_type>
, но когда элементпринадлежащий дескриптору узла, он имеет тип std::pair<key_type, mapped_type>
(так что вы можете изменить значение ключа).
Таким образом, если вы получаете ссылку / указатель на элемент, когда элемент принадлежит карте, тогда вы не сможете использовать эту ссылку / указатель после извлечения элемента и до его повторной вставки, иначе вы нарушите строгое правило псевдонимов.
Однако использование ссылки / вполне допустимоуказатель, полученный после извлечения.