快速C ++简化了map \ dictionary之类的集合?

时间:2015-05-17 19:27:27

标签: c++ dictionary

我需要一个简单的API

int id = Put(value);
void Remove(id);
// and some kind of for_each that could iterate over all data ( there will be around ~1000 objects or less), and this is operation that will be calld super often compared to Put and Remove

很多关于std :: map如何缓慢的C ++混淆中有is extreamly批评。事实上,我并不需要任何成员。因此,在这种印象下,我寻找一种能够满足我的缩小需求的替代方案。

1 个答案:

答案 0 :(得分:2)

主要归结为您需要/关心的特征。地图提供:

  1. 唯一键
  2. 按键快速查找
  3. 按键按顺序迭代
  4. 插入/删除任意项目
  5. 始终保持订单
  6. 如果您不需要所有这些,那么使用其他容器可能会更好。如果你不关心顺序或唯一性,那么你可以创建一个int / pointer(或guid / pointer)对的向量,并根据需要添加新对。这支持快速迭代,但是使得查找单个项目相对较慢并且无法保持唯一性。如果您想在特定时间订购,可以使用sort来获得。同样,如果您想在特定时间使用唯一性,则可以使用sort后跟unique来获取它。当它被排序时,按键查找项目通常非常快(通常比使用map更快)。

    如果您关心唯一性但在迭代它们时不需要按顺序排列项目,则可能需要考虑使用unordered_map。像地图一样,这仍然可以让您快速找到单个项目,但迭代不会以有意义的顺序发生。与排序向量一样,按键查找单个项目通常比使用map更快。