如何提高multi_index实现
-
25-09-2019 - |
题
我有一些困难,了解如何提升。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;
我想,我有一阵, Employee[]
, ,这实际上存 employee
对象,两个地图
map<std::string, employee*>
map<int, employee*>
与姓名和年龄如键。每个地图都有 employee*
值,其要点的存储目的阵列。是这个好吗?
解决方案
在下层结构的短给出说明此处一>,引用下面:
的实施是基于与指针相通的节点,就像说你最喜欢的std::set
实现。我会详细说明这一点:一个std::set
通常为RB-树,其中节点模样实施
struct node
{
// header
color c;
pointer parent,left,right;
// payload
value_type value;
};
好,A multi_index_container
的节点基本上是一个“多节点”与尽可能多的标题作为指标,以及作为有效载荷。例如,具有两个所谓的有序索引一个multi_index_container
使用一个内部节点,看起来像
struct node
{
// header index #0
color c0;
pointer parent0,left0,right0;
// header index #1
color c1;
pointer parent1,left1,right2;
// payload
value_type value;
};
(现实情况比较复杂,通过一些元编程等产生这些节点,但你的想法)[...]
其他提示
从概念上讲,是的。
从我所了解的提升。MultiIndex(我已经用它,但是没有看到执行),您的例与两个 ordered_unique
指数将实际上建立两个排的关联容器(喜欢 std::map
)其储存的指针/references/索引入一套共同的 employee
s.
在任何情况下,每 employee
存储只有一旦在多容器编入索引的,而一个组合 map<string,employee>
和 map<int,employee>
将储存的每一雇员的两倍。
它很可能是确实是有一个(动态的)阵内部的一些多索引的容器,但是没有 没有保证 这是真实的:
[随机存取索引]不提供存储连续性, 一个酒店的
std::vector
s由哪 元素存储相邻的一个 另一个在单个区块的存储器。
此外, 提升。Bimap是基于提升。MultiIndex 前者允许对不同的表示其"骨干"的结构。
实际上我不认为它是。
基于什么位于 detail/node_type.hpp
.在我看来,像一个 std::map
该节将包含的价值和指数。除了在这种情况下的各种指标彼此不同,并因此节点的交织,实际上将不同,这取决于指数的你在下面。
我不知道这虽然,提高头肯定很难分析,但是它将使有意义,如果你想在术语的存储器:
- 下分配:快分配/释放
- 更好的高速缓冲地方
我希望一个明确的答复,虽然,如果有人知道有关戈尔。