我希望您能为以下场景提供适当的数据结构建议。我已经定义了键的最小值和最大值,例如:
我需要将每个值进一步分成子桶,以使最小值和最大值之间的差异不能超过1,并且每个桶的最小值将增加0.5。
一旦我创建了这些桶(仅一次),我需要找到给定键和值的合格桶。
例如,键1和2.2的合格桶是B3和B4。
目前,我将所有桶存储在std :: map >中,
其中Buckets是具有存储桶名称,最小值和最大值的结构体变量。
除了std :: map >之外,我可以使用哪些其他替代方案来加快搜索过程?
Key Min Value Max Value
key1 0 .5 4.5
key2 1 9
key3 0.75 1.5
我需要将每个值进一步分成子桶,以使最小值和最大值之间的差异不能超过1,并且每个桶的最小值将增加0.5。
例如,key1将进一步分解
Key Bucket Min Value Max Value
key1 B1 0.5 1.5
key1 B2 1 2
key1 B3 1.5 2.5
key1 B4 2 3
key1 B5 2.5 3.5
key1 B6 3 4
key1 B7 3.5 4.5
一旦我创建了这些桶(仅一次),我需要找到给定键和值的合格桶。
例如,键1和2.2的合格桶是B3和B4。
目前,我将所有桶存储在std :: map >中,
其中Buckets是具有存储桶名称,最小值和最大值的结构体变量。
除了std :: map >之外,我可以使用哪些其他替代方案来加快搜索过程?
map
很大,且不会经常更新,你可以考虑用unordered_map
替换它,这可能会通过Key
提供更快的查找速度。在这种情况下,桶被保证以0.5
的增量递增,你可以立即从2 * int(value - min_value)
中找到vector<Bucket>
中的索引。就像任何优化一样,请确保对其进行分析 :-) - ChrisD