的我需要散列〜从它们的2^12上的低端的空间采样15000个无符号整数,以在高端多达2^32。我还需要存储索引进行反向查找。一个简单的例子使用C++ STL是:最快类型哈希映射
std::map<unsigned int, std::set<unsigned int /* unique indices */> > m;
在密集的情况下,我们可以认为这是:
std::vector<std::set<unsigned int /* unique indices */> > v;
现在的问题。速度是最重要的因素在这里,但我的“M仍然在内存方面的限制。我需要在内存中存储和访问这些地图的1000年在一个低延迟应用率很高。查询应该是顺序纳秒数
我目前使用密集方法存储数据,但是我想增加需要哈希的密钥的范围为2^32,这使得密集方法存在问题。只需要在地图上存储~15000个密钥
从好的一面来看,一旦地图建好了,我再也不会插入任何东西了,以后我只会查询它,插入仍然需要相当快,但不是作为查询的关键。
一些代码,我已经试验过的:
谷歌SparseHash
谷歌DenseHash
STL unordered_map
STL地图
我不介意写我自己的哈希表。我想在得到一些专家建议之前自己解决它。
你的意思是没有任何现有的库都足够快? –
密集版本足够快。但是,如果从2^32或更高的空间采样键,它会消耗大量内存。 – paul
我想知道是否有任何技巧可以使用,如果我知道地图在构建后不会更改。 – paul