C++中的map vs multimap(性能)

Man*_*ish 16 c++ dictionary

我正在研究数据结构,其输入非常大,接近1 TB.我需要将数据加载到关联容器中.

数据有一些重复的entires所以我使用multimap但有人建议我使用vector的map而不是使用它.我可以知道明智的表现有什么不同吗?

 map<const char*, const char*, cmptr> mulmap;

 map <const char*, vector <const char*> ,cmptr> mmap;
Run Code Online (Sandbox Code Playgroud)

Die*_*Epp 20

你在浪费时间思考map对抗multimap.假设箱的数量是N并且每箱的平均物品数是M.

A std::multimap<Key, Val>通常使用具有重复键的RB树.

  • 获取为O(log N + log M)
  • 插入是O(log N + log M)
  • 删除是O(log N + log M)
  • 迭代是O(1)

A std::map<Key, std::vector<Val>>通常使用具有唯一键的RB树.

  • 获取为O(log N)
  • 插入是O(log N)
  • 删除是O(日志N)
  • 迭代是O(1)

正如你所看到的,除非M非常大,否则差异不值得讨论.

但是,两者的存储都受RAM的限制.对于大多数系统来说,1 TB根本不可行,而且我听说没有支持它的主板.

最好使用1 TB数据的数据库.您可以为此任务选择几乎任何数据库. 京都内阁很简单,做你想要的,但你也可以使用PostgreSQL,MySQL,Sqlite,Dynamo,Redis,MongoDB,Cassandra,Voldemort ......

  • 对于"1 TB数据",实际上需要注意哪个数据库以及如何访问数据..存在限制等. (2认同)
  • @ user15662:对于这类工作,我仍然推荐京都议会对`std ::`的任何事情. (2认同)
  • +1 @ user15662然后有一个坚如磐石的DB后端应该是给定的.我同意迪特里希的观点. (2认同)

Ola*_*che 5

使用1 TB的输入,我也不会使用.最有可能的是,你没有足够的内存.在B-tree等磁盘数据结构上使用一些.