Ich versuche herauszufinden, die beste Möglichkeit, einen Cache für Ressourcen zu tun. Ich suche hauptsächlich nach nativen C/C++/C++ 11 Lösungen (d. H. Ich habe keinen Boost und die Likes als Option).C++ 11 unordered_map Zeit Komplexität
Was ich tue, wenn sie aus dem Cache Abrufen von so etwas wie diese:
Object *ResourceManager::object_named(const char *name) {
if (_object_cache.find(name) == _object_cache.end()) {
_object_cache[name] = new Object();
}
return _object_cache[name];
}
Wo _object_cache
definiert ist, so etwas wie: std::unordered_map <std::string, Object *> _object_cache;
Was ich frage mich, ist über die Zeit, Komplexität, dies zu tun, findet es eine lineare Zeitsuche oder ist es eine Art Nachschlageoperation?
Ich meine, wenn ich _object_cache["something"];
auf das angegebene Beispiel tun wird es entweder das Objekt zurückgeben oder wenn es nicht existiert, wird es den Standardkonstruktor aufrufen, ein Objekt einzufügen, was nicht das ist, was ich will. Ich finde das ein wenig kontraintuitiv, ich hätte erwartet, dass es auf irgendeine Art und Weise berichtet (nullptr
zum Beispiel), dass ein value
für den key
nicht abgerufen werden konnte, nicht zweiterraten, was ich wollte.
Aber noch einmal, wenn ich eine find
auf den Schlüssel, löst es eine große Suche, die tatsächlich in linearer Zeit (da der Schlüssel nicht gefunden wird, wird es auf jeden Schlüssel zu sehen) laufen?
Ist dies ein guter Weg, um es zu tun, oder hat jemand einige Vorschläge, vielleicht ist es möglich, einen Blick nach oben oder etwas zu wissen, ob der Schlüssel verfügbar ist oder nicht, kann ich oft zugreifen, und wenn es der Fall ist dass etwas Zeit mit Suchen verbracht wird, möchte ich es beseitigen oder es zumindest so schnell wie möglich machen.
Dankbar für jede Eingabe zu diesem Thema.
Danke für die Antwort (eigentlich zu allen Antworten die ich erhalten habe), besonders gefallen mir die knappen Erklärungen. Ich fühle, dass ich sowohl die Antwort auf meine Frage besser verstehe, als auch die Notiz über die Verwendung von "unique_ptr", die vollkommen Sinn macht. – qrikko