【发布时间】:2012-10-27 17:16:20
【问题描述】:
一个简单的问题,但答案对我来说并不明显:出于性能原因,从性能角度来看,我应该在以下场景中最好使用哪种地图类型(或者可能是非地图类型?)容器:
- 键是无符号整数,
- 插入频繁,
- 读取访问更加频繁和随机访问,
- 项以升序键值插入(第一个插入项的键为 0,下一个键为 1,依此类推),
- 项目被随机删除(因此迟早键列表将有“漏洞”,因为相应的项目已被删除)。移除几乎与插入一样频繁。
我对使用std::map 犹豫不决,因为升序键顺序和频繁删除似乎意味着不断重新平衡搜索树,这对我来说似乎是对性能的浪费。
换句话说:我是否可以从我提前知道项目的键是什么,甚至是键在插入时出现的顺序这一事实中获得性能? (不过我不知道项目的总数。)
【问题讨论】:
-
std::unordered_map然后,又名哈希表。 -
如果订单不是一个因素(听起来好像不是),我会考虑使用 unordered_map。如果您的键空间正常并且节点数的顶端也达到稳定,则 unordered_map 具有潜力。
-
使用
std::map和std::unordered_map配置文件,看看哪一个效果最好。 -
“正常”键空间是什么意思?
-
您的键的可能值是多少?如果 [0,N) 范围内的任何值,那么 N 是多少?