提升multi_index - 如何使其按插入顺序排列?

时间:2018-05-23 12:08:58

标签: c++ boost

其定义如下:

typedef boost::multi_index_container<
  X, // the data type stored
  boost::multi_index::indexed_by< 
    boost::multi_index::hashed_unique<
      boost::multi_index::composite_key<
        X,
        boost::multi_index::member<X,std::string,&X::name>,
        boost::multi_index::member<X,std::string,&X::p1>,
        boost::multi_index::member<X,std::string,&X::p2>
      >
    >
  >
> container;

我使用insert()插入新项目。

但是容器用字符串键对它们进行排序,而不是存储插入顺序。

我需要存储它。

1 个答案:

答案 0 :(得分:1)

您需要为您希望能够搜索的每个订单的定义添加索引。

boost::multi_index::sequencedstd::list提供了类似访问权限

boost::multi_index::random_accessstd::vector提供了类似访问权限

另请注意,您定义container不会以任何特定顺序保留内容,它std::unordered_set只能访问它的唯一索引。

boost::multi_index_container<
  X, // the data type stored
  boost::multi_index::indexed_by< 
    boost::multi_index::random_access,
    boost::multi_index::hashed_unique<
      boost::multi_index::composite_key<
        X,
        boost::multi_index::member<X,std::string,&X::name>,
        boost::multi_index::member<X,std::string,&X::p1>,
        boost::multi_index::member<X,std::string,&X::p2>
      >
    >
  >
> container;

container.index<0>().erase(container.index<0>().begin() + 10) // insertion order
container.index<1>().find(some_value) // unordered