【发布时间】:2019-06-05 20:07:23
【问题描述】:
我正在寻找改进无序地图查询时间访问的建议。我的代码基本上只包含两个步骤。第一步,我填充无序地图。在第一步之后,不再向地图添加条目。第二步,只查询无序地图。由于地图本质上是不变的,有什么办法可以加快查询时间? 例如,stl 是否提供任何可以调整映射中的内部分配以改善查询时间访问的功能?换句话说,有可能不止一个键被映射到无序映射中的同一个桶。如果为映射分配了更多内存,则可以减少发生此类冲突的机会。从这个意义上说,我很好奇知道无序映射将保持不变这一事实是否可以做任何事情。
【问题讨论】:
-
Here 是您了解地图访问复杂性的一个很好的参考。
-
@muaz- 感谢您的评论。我想我对这个问题的早期版本不是很清楚。请查看更新版本。是的,我知道访问的平均案例复杂性。
-
map 是一个哈希表,因此如果您使用自定义的类或结构作为键,那么是否发生冲突取决于您的哈希函数,即分配的内存与冲突无关。
-
@muaz: "...冲突取决于您的哈希函数..." - 不是这样 - 哈希函数通常返回 32 位或 64 位值,然后将其屏蔽(按位与)或进行
%-模运算以将哈希值映射到特定的哈希桶;哈希桶的数量 - 用 C++ 的说法,capacity()- 是 batwing 一直在考虑的,增加容量(显然降低负载因子并且)倾向于减少冲突,因为现在相同的哈希函数将映射一些对额外的桶进行掩码或修改后的值。 -
Tony,如果哈希函数为两个不同的输入返回相同的值,那么无论哈希表中有多少个桶,它们最终都会在同一个桶中。
标签: c++11 unordered-map