C++11 の出現により、unordered_map.cbegin/cend があり、具体的に const_iterator の値を返します。そのため、式「auto it = unordered_map.cbegin()」の「it」の推定型は const_iterator です。
ただし、 unordered_map.find(key) 関数に関しては、具体的に const_iterator を返す「cfnd()」の対応物が欠落している可能性があると思います。
「const auto it = unordered_map.find(key)」を使用して「const iterator」を取得できると言う人もいますが、「const iterator」は同じ「const_iterator」であると強く疑っています。 「const_iterator」は、イテレーターが参照しているコンテンツを変更する機能を制限しますが、イテレーター自体を変更する機能。
したがって、実際には、「auto」型推論を完全に利用したい場合 (「auto」型推論の混乱またはバリエーション (auto、auto&、const auto& など) を知っている場合)、unordered_map を使用するにはどうすればよいですか? .find(key) を使用して、「const_iterator」を明示的に指定しなくても「const_iterator」を返すことができます。これは、auto の最適な使用例です。
以下は、コンパイラの動作を示す簡単なコード例です。
#include "stdafx.h"
#include <unordered_map>
int _tmain(int argc, _TCHAR* argv[])
{
typedef std::unordered_map<int, int> umiit;
umiit umii;
auto it0 = umii.find(0);
it0->second = 42;
const auto it1 = umii.find(0);
it1->second = 42;
umiit::const_iterator it2 = umii.find(0);
it2->second = 42; // expected compiler error: assigning to const
return 0;
}