代码之家  ›  专栏  ›  技术社区  ›  uray

按索引和按名称检索的最佳数据结构

  •  1
  • uray  · 技术社区  · 16 年前

    假设您需要实现 T 项,其值可以通过数字索引(随机访问)和名称(作为字符串)检索。

    例如检索、添加和删除项目:

    (在这种情况下,按索引检索需要通过遍历地图来实现)

    std::map<std::string,T> container;
    

    std::vector<std::pair<std::string,T>> container;
    

    或者提供两个单独的容器 (快速检索,但添加/删除操作较慢)

    std::vector<T> byIndexContainer;
    std::map<std::string,T> byNameContainer;
    

    或者你可以建议其他更好的数据结构?

    3 回复  |  直到 16 年前
        1
  •  1
  •   wheaties    16 年前

    或者你可以选择最棒的 Boost::MultiIndex

        2
  •  0
  •   Martin Ingvar Kofoed Jensen    16 年前

    使用两个独立容器的示例是索引的fast,如您所说,添加/删除的fast要慢一点。它结合了最好的整数索引和字符串索引。你可以自己做一个内部有这两个的类型。

        3
  •  0
  •   Zachary Vance    16 年前

    如果你不想为了速度而随机访问,但是因为某种原因你真的想要一个索引,一个不需要太多努力的解决方案就是保持一个排序的向量,当你插入什么的时候它会使索引失效。一般来说,你不能有一个静态索引(删除后相同),因为当你删除某个东西时,你需要通过移动东西来改变索引,或者称这个索引为“无效”,在这种情况下,你的“索引”实际上是键,因为第n个索引不是第n个,你不能使用所有的索引。在这种情况下,只需直接使用字符串。

    如果确实需要整数键和字符串键,那么可能需要使用双容器方法。不久前我写了一些东西,如果需要的话,它可以维护一个唯一键列表(您可以将其专门化为整数)。不过,它在某处工作,除非你评论,否则我不会找它。