したがって、マップ const_iterator をエミュレートするスマート イテレーターがあり、戻り値の型を内部で構築する必要があります。明らかに、イテレータ クラスに a を格納したいのですがpair<Key, Value>
(変更する必要があるため)、同時に逆参照関数で a を提示しpair<const Key, Value>
たいと考えています (実際には、それぞれ a const pair<const Key, Value>&
andになりconst pair<const Key, Value>*
ます)。これまでに思いついた唯一の解決策は、反復子クラスが指す値が変更されるたびに新しいペアを動的に割り当てることです。言うまでもなく、これは良い解決策ではありません。
*const_cast<const pair<const Key, Value> >(&value)
また、 wherevalue
が として宣言されていることも試しましたpair<Key, Value>
。
どんな助けも大歓迎です(それができないという知識と同様に)。
編集
好奇心のために:私はpair<const Key, Value> p
イテレータクラスに a を格納することになりました。ペアを変更するために、基になる反復子 ( map<Key, Value>::const_iterator it
) に基づいて 2 つの要素を個別に変更し、次const_cast
のようにキーを変更できるようにします。
*const_cast<Key*>(&p.first) = it->first;
p.second = it->second;
私が非常に満足している解決策ではありませんが、それは仕事を成し遂げます。参照できる正しい型のものを保存しているので、逆参照メソッドは満足しています。