c – 什么时候使用std :: unordered_map :: emplace_hint?

前端之家收集整理的这篇文章主要介绍了c – 什么时候使用std :: unordered_map :: emplace_hint?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道如何使用std :: unordered_map :: emplace,但是如何使用emplace_hint? cpluspluscppreference都没有提供一组示例来说明我们如何知道放置元素的位置.

任何人都可以提供有关这方面的信息,或者给出一些例子/插图,说明我们何时可以知道放置元素应该去哪里?

解决方法

unordered_map有什么可能与提示有关?那么,如果迭代器处理与emplace_hint被要求插入的元素具有相同键的元素,那么它可能会很快失败 – 只是一个关键的比较,没有任何散列或通过任何哈希冲突元素列表进行搜索.但是,如果密钥不匹配,那么提示是无用的,因为任何其他密钥 – 无论值如何“接近” – (概率地)应该在一个完全不相关的桶(给定通常被认为是“好的”哈希函数) ),所以时间会浪费在一个关键的比较上,只能重新开始,好像它是一个正常的起点.

当您插入预先排序的元素时,这可能很有用,旨在删除该过程中的大量重复项,但是关键是如此巨大,将迭代器保存到刚插入元素比将其复制到密钥或者散列函数特别慢.

unordered_map :: emplace_hint的另一个优点是与map :: emplace_hint的API兼容性更好,因此代码可以切换容器类型,并且emplace_hints不会中断编译,尽管它们可能会比代码切换到emplace()的速度慢帮助地图的紧密但不同的关键提示可能无用于unordered_map.

猜你在找的C&C++相关文章