加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:48:02 所属栏目:百科 来源:网络整理
导读:我知道如何使用std :: unordered_map :: emplace,但是如何使用emplace_hint? cplusplus和 cppreference都没有提供一组示例来说明我们如何知道放置元素的位置. 任何人都可以提供有关这方面的信息,或者给出一些例子/插图,说明我们何时可以知道放置元素应该去
我知道如何使用std :: unordered_map :: emplace,但是如何使用emplace_hint? cplusplus和 cppreference都没有提供一组示例来说明我们如何知道放置元素的位置.

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读