【发布时间】:2013-03-11 16:17:28
【问题描述】:
std::map 有一个 insert 方法,该方法采用“提示”迭代器,如果提示正确,该迭代器会将插入时间从 log(n) 减少到恒定时间。很明显这是如何工作的,因为容器可以确保新添加的项目具有小于提示的键并且具有大于提示之前的项目的键。否则提示是错误的,它会执行正常的插入。
std::unordered_map 也有类似的insert 带有提示功能。如果有的话,提示有什么作用?对我来说,如何使用另一个“提示”迭代器来加速哈希映射插入并不明显。
如果使用,什么是适当的“提示”。在std::map 中,通常通过在地图上调用lower_bound 来找到提示。
【问题讨论】:
-
我认为提示重载只是为了与普通
std::map的接口兼容性,因为您必须确切知道要插入您的值的哈希值的位置才能做任何有用的事情 - 这意味着您需要考虑负载、存储桶等,基本上复制unordered_map在内部所做的事情。此外,正如您所指出的,无论如何,插入都是摊销的 O(1)。 -
所以要清楚,你是说它没有做任何事情?这就是我的猜测......这只是为了兼容。