5
std::map<char,int> dict;
...
auto pmax = dict.begin(); // here i get const iterator

取得した値が非定数型であることを「明示的に示す」ことはできますか?

4

2 に答える 2

3

でない場合dictconstbeginを返しますstd::map<char,int>::iterator。さて、キーはconstですが、値はそうではありません。

autoあなたに与えるべきですstd::map<char,int>::iterator; 反対の証拠はありますか?

于 2013-04-02T07:39:51.283 に答える
0

コードを見ると、基本的に実装してい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

于 2013-04-02T13:57:20.180 に答える