问题:
人们对此抱怨: 在 STL 地图中,使用 map::insert 比使用 [] 更好吗?
访问时
std::map<Key, ExpensiveDefaultConstructorValue> data;
data[key1] // <-- Calls default constructor each time it is called,
// even when the element is there
实现简单而优雅,但完全低效(好吧,取自 unordered_map)。
_Tp& operator[](const key_type& __key)
{ return _M_ht.find_or_insert(value_type(__key, _Tp())).second; }
显而易见的解决方案
_Tp& operator[](const key_type& __key)
{ return _M_ht.find_or_insert_default(key_type(__key)).second; }
where仅在需要时才find_or_insert_default
调用_Tp()
(即元素不存在)
为什么不?
在知道您需要它之前构建新元素的这种悲观方法可能会导致其他问题吗?
这是标准库,他们应该不遗余力地对其进行优化。为什么不使用这种简单的方法?