【问题标题】:Fast C++ simplified map\dictionary like collection?快速 C++ 简化地图\字典之类的集合?
【发布时间】:2015-05-17 19:27:26
【问题描述】:

我需要一个简单的 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

isextreamly 在许多 C++ 会议中都在讨论 std::map 有多慢。实际上我并不需要它的所有成员。因此,在这种印象下,我寻找一种可以满足我缩小需求的替代方案。

【问题讨论】:

  • 您实际尝试过什么,需要多快? (我希望在现代台式电脑上在 std::map 中添加然后删除 1000 个元素会在不到 1 毫秒的时间内完成,但是当然,如​​果你有一个 40MHz 的微控制器,它可能会超过 100 毫秒左右)

标签: c++ dictionary


【解决方案1】:

这主要取决于您需要/关心的特征。地图提供:

  1. 唯一键
  2. 按键快速查找
  3. 按键按顺序迭代
  4. 插入/删除任意项
  5. 始终保持秩序

如果您不需要所有这些,则使用其他容器可能会更好。如果您不关心顺序或唯一性,那么您可以只创建一个 int/pointer(或 guid/pointer)对的向量,并根据需要添加新的对。这支持快速迭代,但会导致查找单个项目相对较慢,并且无法保持唯一性。如果您想在特定时间订购,可以使用 sort 来获得。同样,如果您希望在特定时间具有唯一性,则可以使用 sort 后跟 unique 来获得。排序后,按键查找项目通常非常快(通常比使用map 更快)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多