的我需要散列〜從它們的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