Mit dem Aufkommen von C++ 11 haben wir unordered_map.cbegin/cend, um speziell Werte von const_iterator zurückzugeben. Der abgeleitete Typ von "it" im Ausdruck "auto it = unordered_map.cbegin()" ist also const_iterator.Abgeleitete Art von "auto it = unordered_map.find (key)"?
Allerdings, wenn es um unordered_map.find (Schlüssel) -Funktion geht, denke ich, es fehlt möglicherweise ein "cfind()" Gegenstück, die spezifisch einen const_iterator zurückgibt.
Einige sagen, dass wir "const auto it = unordered_map.find (key)" verwenden können, um einen "const iterator" zu erhalten, aber ich habe den starken Verdacht, dass "const iterator" gleich "const_iterator" ist, wobei " const iterator "beschränkt die Möglichkeit, den Iterator selbst zu ändern, während" const_iterator "die Möglichkeit einschränkt, den Inhalt zu ändern, auf den sich der Iterator bezieht.
Also, wirklich wollen, wenn wir die Vorteile von „auto“ Typ Abzug (mit dem Wissen über die Verwirrungen oder die Variationen von „auto“ Typ Abzug - auto, auto &, Konst Auto &, etc.) vollständig zu übernehmen , wie kann ich unordered_map.find (key) haben, um einen "const_iterator" zurückzugeben, ohne dass ich explizit "const_iterator" angeben muss - das ist nach all dem besten Anwendungsfall für auto!
Unten ist ein einfaches Beispiel-Code, der den Compiler Verhalten zeigt:
#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;
}
Was ist die Frage? –
Die Frage ist im vierten Absatz: ** Wie kann ich unordered_map.find (Schlüssel) haben, um einen "const_iterator" zurückzugeben, ohne dass ich explizit "const_iterator" angeben muss?** – dfan