私は膨大な量(1500万)の整数ペアを持ち、それぞれがドキュメントIDに関連付けられています。私の目標は、同じペアを持つドキュメントを検索することです。メモリ効率の良いマップ<pair <int,int>、set <int>>代替
私の最初のアイデアは、すなわちmap<pair<int,int>, unordered_set<int>>
例えば、関連する値としてキーと対値と文書IDを使用してハッシュマップ(std::map
)を使用することであった。
Document1
- pair1: (3, 9)
- pair2: (5,13)
Document2
- pair1: (4234, 13)
- pair2: (5,13)
map<pair<int,int>, unordered_set<int>> hashMap
hashMap[{3, 9}].insert(1)
hashMap[{5, 13}].insert(1)
hashMap[{4234, 13}].insert(2)
hashMap[{5, 13}].insert(2)
が生じます
Key(3,9) = Documents(1)
Key(5,13) = Documents(1,2)
Key(4234,13) = Documents(2)
私の問題は、これが私の利用可能な24 GBのRAMを超える膨大な量のメモリを必要とすることです。したがって、私はメモリに収まるような挿入と検索のための良いパフォーマンスを持つ代替手段が必要です。理論的には、オーバーヘッドコストが考慮されていないときは1500 Million * 3 (PairVal1, PairVal2, Document-ID) * 4 (bytes per Integer) = 18GB
を使用しています。だから私の問題のための良い選択肢はありますか?
std :: mapはハッシュマップではありません。std :: unordered_map –
私はそれを効率的に話すことはできませんが、この種の問題についてはstxxlを参照してください。 http:// stxxl。sourceforge.net/ – Dan
'set'の文書数が少ない場合は、' std :: vector'で置き換えることができます – Galik