std::map<char,int> dict;
...
auto pmax = dict.begin(); // here i get const iterator
取得した値が非定数型であることを「明示的に示す」ことはできますか?
でない場合dict
はconst
、begin
を返しますstd::map<char,int>::iterator
。さて、キーはconst
ですが、値はそうではありません。
auto
あなたに与えるべきですstd::map<char,int>::iterator
; 反対の証拠はありますか?
コードを見ると、基本的に実装していstd::max_element
ます。したがって、最後の出力行を次のように書き換えることができます。
std::cout << std::max_element(begin(dict), end(dict),
[](decltype(*begin(dict)) a, decltype(*begin(dict)) b) {
return a.second < b.second;
})->first << std::endl;
確かに、これdecltype(*begin(dict))
は醜いですが、C++1y のジェネリック ラムダによって修正されることを願っています。
要点は、map::iterator
orを持っているかどうかに関係なく、map::const_iterator
それを逆参照するときに、結果は最初の引数としてastd::pair
を持つ aになるということです。したがって、変更可能なデータ (たとえば、 を介して取得) に 2 つのconst key_type
がある場合でも、それらのイテレータによって参照される完全なものを再割り当てすることはできません。したがって、と を上書きしようとしているため、機能しません。iterator
it1, it2
map::begin()
pair
*it1 = *it2
mapped_type
const key_type