[英]mmap-loadable data structure library for C++ (or C)
我有一些大型數據結構(N> 10,000),通常只需要創建一次(在運行時),之后可以多次重復使用,但需要非常快速地加載。 (它用於iPhoneOS上的用戶輸入處理。) mmap
-ing文件似乎是最好的選擇。
C ++(或C)是否有任何數據結構庫? 沿線的東西
ReadOnlyHashTable<char, int> table ("filename.hash");
// mmap(...) inside the c'tor
...
int freq = table.get('a');
...
// munmap(...); inside the d'tor.
謝謝!
我自己寫了一個類似哈希表的類,但我覺得很難維護,所以我想看看是否已有解決方案。 圖書館應該
假設:
float
編碼等)無關緊要,因為它僅在本地使用。 struct
。 指針不會出現。 PS Can Boost.intrusive幫助?
您可以嘗試創建內存映射文件,然后使用客戶分配器創建STL映射結構。 然后,您的客戶分配器只需占用內存映射文件的內存的開頭,然后根據請求的大小遞增其指針。 最后,所有分配的內存應該在內存映射文件的內存中,並且應該可以在以后重新加載。
您必須檢查STL映射是否釋放了內存。 如果是,您的客戶分配器將丟失內存映射文件的一些內存,但如果這是有限的,您可以使用它。
聽起來也許你可以使用的“完美哈希”的公用事業公司之一在那里。 這些花費一些時間來優化特定數據的散列函數,因此沒有散列沖突和(對於最小的完美散列函數),因此散列表中沒有(或至少很少)空間隙。 顯然,這是為了很少生成,但經常使用。
CMPH聲稱應對大量的鑰匙。 但是,我從未使用它。
它很有可能只生成哈希函數,讓您使用它來生成數據結構。 這應該不是特別難,但它可能仍然讓你離開現在的位置 - 至少保留一些代碼本身。
GVDB(GVariant數據庫),Dconf的核心就是這個。
見git.gnome.org/browse/gvdb ,dconf和bv
和developer.gnome.org/glib/2.30/glib-GVariant.html
剛想到另一種選擇 - Datadraw 。 同樣,我沒有使用過這個,所以沒有保證,但它確實聲稱是一個快速持久的數據庫代碼生成器。
WRT boos.intrusive,我剛看了一眼。 這真有趣。 而且很煩人,因為它使我自己的一個庫看起來有點無意義。
我認為這部分看起來特別相關。
如果你可以使用“智能指針”作為鏈接,大概可以使用一個簡單的從基地址偏移的整數來實現智能指針類型(我認為這是示例的重點)。 數組下標可能同樣有效。
肯定有無序的set / multiset支持(哈希表的C ++代碼)。
使用cmph會起作用。 它確實具有哈希函數本身的序列化機制,但是如果你的查詢集宇宙在手頭不知道的話,你還需要序列化密鑰和數據,除了在它上面添加一層沖突解決方案。 如果您事先知道所有鍵,那么這是一種方法,因為您不需要存儲鍵並且將節省大量空間。 如果沒有,對於這么小的一套,我會說它太過分了。
可能最好的選擇是使用谷歌的sparse_hash_map。 它具有非常低的開銷,並且還具有您需要的序列化掛鈎。
http://google-sparsehash.googlecode.com/svn/trunk/doc/sparse_hash_map.html#io
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.