首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何实现boost multi_index

如何实现boost multi_index
EN

Stack Overflow用户
提问于 2010-11-18 00:00:23
回答 1查看 3.8K关注 0票数 21

我很难理解Boost.MultiIndex是如何实现的。假设我有以下内容:

代码语言:javascript
复制
typedef multi_index_container<
    employee,
    indexed_by<    
        ordered_unique<member<employee, std::string, &employee::name> >,
        ordered_unique<member<employee, int, &employee::age> >
    > 
> employee_set;

假设我有一个实际存储employee对象的数组Employee[]和两个映射

代码语言:javascript
复制
map<std::string, employee*>
map<int, employee*>

以姓名和年龄为关键字。每个映射都有指向数组中存储的对象的employee*值。这样可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-18 03:32:13

下面给出了here对底层结构的简短解释:

就像你最喜欢的std::set实现一样,它的实现是基于节点和指针的互连。我将对此进行详细说明:std::set通常实现为rb树,其中的节点如下所示

代码语言:javascript
复制
struct node
{
  // header
  color      c;
  pointer    parent,left,right;
  // payload
  value_type value;
};

嗯,multi_index_container的节点基本上是一个“多节点”,它有和索引一样多的头部和有效负载。

代码语言:javascript
复制
struct node
{
  // header index #0
  color      c0;
  pointer    parent0,left0,right0;
  // header index #1
  color      c1;
  pointer    parent1,left1,right2;
  // payload
  value_type value;
};

(实际情况更为复杂,这些节点是通过一些元编程等方式生成的,但你可以理解其中的意思)……

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4206349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档