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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...