質問

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;

配列が 1 つあると想像しますが、 Employee[], 、実際には employee オブジェクトと 2 つのマップ

map<std::string, employee*>
map<int, employee*>

名前と年齢をキーにします。各マップには、 employee* 配列に格納されているオブジェクトを指す値。これでいい?

他のヒント

実際にはそうではないと思います。

にあるものに基づいて、 detail/node_type.hpp. 。のような気がします std::map ノードには値とインデックスの両方が含まれます。ただし、この場合、さまざまなインデックスが互いに異なるため、ノードのインターリーブは実際には、フォローしているインデックスに応じて異なります。

ただし、これについてはよくわかりません。Boost ヘッダーは間違いなく解析が困難ですが、メモリの観点から考えると、次のことは理にかなっています。

  • 割り当てが少なくなります:より高速な割り当て/割り当て解除
  • キャッシュの局所性が向上

ただし、ゴアについて知っている人がいたら、明確な回答をいただければ幸いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top