Да, вам нужен прокси для хранения соответствующей ссылки.
Что касается типа: итераторы стандартной библиотеки обычно разыменовывают что-то типа value_type
. Для map<K,V>
типом значения является std::pair<K, V>
(точнее, pair<key_type, mapped_type>
), откуда вы получаете интерфейс first
/ second
.
(Одна из лекций Стефана Лававея объясняет, как реализация MSVC ++ использует одну и ту же базовую структуру данных для set
и map
; единственное отличие состоит в том, что set::value_type
равняется set::key_type
, тогда как map::value_type
равно pair<key_type, mapped_type>
Таким образом, вы можете отличить их друг от друга с помощью простой проверки черт, но интерфейс итератора практически идентичен.)