【发布时间】:2010-11-23 06:19:45
【问题描述】:
我有 unsigned int 类型的 ID 值。我需要将 Id 映射到 恒定时间 中的指针。
密钥分配:
ID 的值在 0 到 uint_max 的范围内。大多数键将聚集到一个组中,但会有异常值。
实施:
我曾考虑过使用 C++ ext hash_map 的东西,但我听说当键的潜在范围很大时,它们的性能并不太好。
-
我还考虑过使用某种形式的链式查找(相当于递归地将范围细分为 C 卡盘)。如果某个范围内没有键,则该范围将指向 NULL。
N = 键范围
0级(分为C = 16,所以16个)= [0, N/16), [N/16, 2*(N/16)), ...
1级(分为C=16,所以16*16块)=...
还有其他人对如何更有效地实施这种映射有想法吗?
更新:
我所说的常量是指每个键查找不会受到项目中值的 # 的显着影响。我并不是说它必须是一个单一的操作。
【问题讨论】:
-
另外,请尽量减少内存使用(类似于上面的链式查找...)。请不要建议分配大小为 KEY_RANGE 的数组;)
标签: c++ algorithm data-structures hash hashtable