我想弄清楚爲資源做緩存的最佳方法。我主要在尋找原生的C/C++/C++ 11解決方案(即我沒有提升和類似的選項)。C++ 11 unordered_map時間複雜度
從緩存中檢索,當我在做什麼是這樣的:
Object *ResourceManager::object_named(const char *name) {
if (_object_cache.find(name) == _object_cache.end()) {
_object_cache[name] = new Object();
}
return _object_cache[name];
}
凡_object_cache
的定義是這樣的:std::unordered_map <std::string, Object *> _object_cache;
我想知道大約是這樣做的時間複雜度,會發現觸發器是線性時間搜索還是作爲某種查找操作完成的?
我的意思是如果我對給定的例子做_object_cache["something"];
它會返回對象或者如果它不存在,它會調用默認的構造函數插入一個不是我想要的對象。我發現這有點違反直覺,我本來期望它以某種方式報告(例如返回nullptr
),key
的value
無法檢索,而不是我猜想的。
但是,如果我在鍵上做了find
,它是否會觸發一個實際上會以線性時間運行的大型搜索(因爲找不到鍵會看到每個鍵)?
這是一個好辦法做到這一點,或有沒有人有一些建議,也許有可能使用起來一看什麼的知道,如果關鍵是可用,我可以訪問頻繁,如果是這樣的話我花了一些時間去搜索,我想消除它,或者至少儘快完成。
感謝您對此的任何意見。
感謝您的回答(實際上我收到的所有答案),我特別喜歡簡潔的解釋。我覺得我更好地理解了我的問題的答案,我也喜歡關於使用'unique_ptr'的說明,這非常合理。 – qrikko