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::iteratororを持っているかどうかに関係なく、map::const_iteratorそれを逆参照するときに、結果は最初の引数としてastd::pairを持つ aになるということです。したがって、変更可能なデータ (たとえば、 を介して取得) に 2 つのconst key_typeがある場合でも、それらのイテレータによって参照される完全なものを再割り当てすることはできません。したがって、と を上書きしようとしているため、機能しません。iteratorit1, it2map::begin()pair*it1 = *it2mapped_type const key_type