STL矢量地图 - 寻找最佳实践

时间:2013-03-03 21:53:04

标签: c++ map vector stl

我对STL没有太多经验,所以我不确定这里最好的方法。

我有一组操作,每个操作都绑定到一个唯一的ID。为了确保我不重复这些操作,我最初考虑将它们存储在std::map中,键入ID。但是,我需要在内部保留严格的排序 a la std::vector,这样当我解除我的操作时,它们会以相反的顺序出现。

任何给定的动作列表可以是从一个或两个项目到几千个。如果我切换到手动检查vector重复项(即迭代和检查ID),我会失去任何东西吗?或者是否有某种形式的map或其他我可以使用的容器让我按ID查找,但不会在内部对我的元素进行排序或重新排序?

2 个答案:

答案 0 :(得分:2)

您可能希望使用boost:multi_index地图,该地图可以支持地图的插入顺序。

struct Item 
{
      string name;
      int data;
};
struct ItemTag {};
typedef multi_index_container<
    Item,
    indexed_by<
        random_access<>, // this index represents insertion order
        hashed_unique< tag<ItemTag>, member<Item, string, &Item::name> >
    >
> ItemsMap;

答案 1 :(得分:2)

听起来你需要Boost.MultiIndex

  

Boost Multi-index Containers Library提供了一个名为multi_index_container的类模板,它可以构建容器,维护一个或多个具有不同排序和访问语义的索引。索引提供类似于STL容器的接口,使用它们很熟悉。在相同的元素集合上进行多索引的概念是从关系数据库术语中借用的,并允许在多索引关系表的精神中规范复杂的数据结构,其中简单的集合和映射是不够的。提供了多种索引,模仿类似STL容器,如std :: set,std :: list和散列集。