あなたはおよそmap
multimap
対を考えてあなたの時間を無駄にしています。ビンの数がNであり、1ビンあたりのアイテムの平均数がMであると仮定する。
std::multimap<Key, Val>
は、通常、重複キーを持つRBツリーを使用します。
- フェッチするO(Mログ+ Nログ)
- 反復はO(1である
- 挿入はO(Mログ+ Nログ)
- 削除である(Mログ+ Nログ)Oであります)
std::map<Key, std::vector<Val>>
は、通常、固有のキーを持つRBツリーを使用します。
- はO(Nを記録)
- 挿入はO(Nを記録)
- 削除されているフェッチ・O(Nを記録)
- 反復はあなたとして(1)
OですMが非常に大きい場合を除いて、その違いは話す価値がありません。
ただし、両方のストレージはRAMによって制限されます。 1 TBは、ほとんどのシステムでは実現不可能であり、私が聞いたマザーボードはサポートしていません。
1 TBのデータにデータベースを使用する方がよい場合があります。このタスクのほとんどすべてのデータベースを選択できます。 Kyoto Cabinetはシンプルで、あなたが望むことをしますが、PostgreSQL、MySQL、Sqlite、Dynamo、Redis、MongoDB、Cassandra、Voldemortも使用できます。
なぜあなたはそれらの両方を試してみませんか? –
実際には、どちらの場合も、1TBのRAMを搭載したシステムを使用している場合を除き、パフォーマンスはディスク速度に左右される可能性があります。 –
'const char * 'をキーとして使用する場合は、比較述部これが機能するには代わりに、 'std :: map'を使う方が簡単です。 –