如何实现boost multi_index

use*_*508 20 c++ boost multi-index boost-multi-index

我在理解如何实现Boost.MultiIndex方面遇到了一些困难.可以说我有以下内容:

typedef multi_index_container<
    employee,
    indexed_by<    
        ordered_unique<member<employee, std::string, &employee::name> >,
        ordered_unique<member<employee, int, &employee::age> >
    > 
> employee_set;
Run Code Online (Sandbox Code Playgroud)

我想我有一个Employee[]实际存储employee对象的数组和两个地图

map<std::string, employee*>
map<int, employee*>
Run Code Online (Sandbox Code Playgroud)

名称和年龄作为键.每个映射都具有employee*指向数组中存储对象的值.这个可以吗?

Joa*_*ñoz 30

这里给出对底层结构的简短解释,引用如下:

该实现基于与指针相互链接的节点,就像您最喜欢的std::set实现一样.我将详细说明:A std::set通常实现为节点外观的rb-tree

struct node
{
  // header
  color      c;
  pointer    parent,left,right;
  // payload
  value_type value;
};
Run Code Online (Sandbox Code Playgroud)

嗯,A multi_index_container的节点基本上是一个"多节点",其头部和索引以及有效负载一样多.例如,multi_index_container具有两个所谓的有序索引的a使用看起来像的内部节点

struct node
{
  // header index #0
  color      c0;
  pointer    parent0,left0,right0;
  // header index #1
  color      c1;
  pointer    parent1,left1,right2;
  // payload
  value_type value;
};
Run Code Online (Sandbox Code Playgroud)

(现实更复杂,这些节点是通过一些元编程等生成的,但你得到了这个想法)[...]

  • 不,Boost.MultiIndex不使用Boost.Intrusive,主要是因为前一个库比后一个库旧.但是,就Boost.Intrusive而言,重写原则上是可行的. (3认同)