我想弄清楚为资源做缓存的最佳方法。我主要在寻找原生的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