我需要一个类似矢量的容器,带有整数索引,但是省略了一些索引。那么在C ++中表示这种稀疏数组的常用方法是什么? 我有一种直觉,即std :: map主要用于此类目的。但对于通常不添加新物品的容器来说,这是相当缓慢的。你能提出什么建议?
UPD:不是很“稀疏”。也许大约5%。项目主要在初始化步骤期间添加(并且通常不会在之后)。但访问频繁(显然我不会开始这个话题,如果它不重要)。
答案 0 :(得分:7)
是的,地图通常是正确的方法。
我建议使用C ++ 11 unordered_map
(基于哈希表)来获得快速查找:如果没有连续的递增密钥,它几乎是最好的。
答案 1 :(得分:1)
也许像
std::vector<boost::optional<your_type>>
对你来说已经足够了。
答案 2 :(得分:0)
项目主要在初始化步骤中添加(并且经常在之后)。但访问频繁
在这种情况下,boost::container::flat_map可能是一个很好的选择。它基本上只是一个有序矢量。优点(从网站上窃取):
潜在的缺点:
即使最坏的情况发生在插入或删除期间(移动底层矢量的元素),由于(1)良好使用缓存,(2)重新定位底层元素可能仍然没有那么糟糕。矢量化(矢量指令)。根据您的使用模式,您必须在应用程序中尝试插入/删除是否存在问题。
如果flat_map
不适合您,我会尝试std::unordered_map
。