我正在研究数据结构,其输入非常大,接近1 TB。我需要将数据加载到关联容器中。
数据有一些重复的entires所以我使用multimap但有人建议我使用vector的map而不是使用它。我可以明白表现有什么不同吗?
map<const char*, const char*, cmptr> mulmap;
map <const char*, vector <const char*> ,cmptr> mmap;
答案 0 :(得分:18)
您在浪费时间考虑map
与multimap
。假设箱的数量是N,并且每箱的平均物品数量是M.
std::multimap<Key, Val>
通常使用带有重复键的RB树。
std::map<Key, std::vector<Val>>
通常使用具有唯一键的RB树。
正如你所看到的,除非M非常大,否则不值得讨论。
然而,两者的存储受RAM限制。对于大多数系统来说,1 TB根本不可行,而且我听说没有支持它的主板。
最好使用1 TB数据的数据库。您可以为此任务选择几乎任何数据库。 Kyoto Cabinet很简单,可以做你想要的,但你也可以使用PostgreSQL,MySQL,Sqlite,Dynamo,Redis,MongoDB,Cassandra,Voldemort ......
答案 1 :(得分:5)
使用1 TB的输入,我不会使用。最有可能的是,你没有足够的内存。在B-tree等磁盘数据结构上使用一些。