I'm implementing a template class of hash table with keys of type K and values of type V in C++11. All content of this table is stored in std::list <std::pair <K,V> >
. Now I want to implement iterator
and const_iterator
for this table in a such way, that the client could modify only the second element of pair through iterator
and couldn't modify any element of pair through const_iterator
.
My first idea was just to use std::list <std::pair <const K,V> >
as a storage and provide the appropriate iterator's of this list. The problem is when I declare this type of std::list
, begin()
and end()
always return const_iterator
, and when I try to convert it to iterator
using this method, it doesn't work, because erase
in libstdc++ receives only iterator
as arguments (it's a bug of libstdc++). So I can't cast const_iterator
to iterator
.
How can I implement such iterators?