2016-10-18 1 views
2

次のように私は、boost :: multi_indexはどのようにメンバー関数で動作しますか?

typedef multi_index_container< 
    employee, 
    indexed_by<  
     hashed_unique<mem_fun<employee, std::string, &employee::getname> >, 
     hashed_unique<mem_fun<employee, int, &employee::getage> > 
    > 
> employee_set; 

をブースト:: multi_indexを持っている場合、私はこのコンテナに挿入されているクラス「従業員」のオブジェクトは(それがOで取得できるように保存されていることを理解1)時間(ハッシュマップとして)。

メンバー変数(名前、年齢)がプログラムの途中で更新されたとき(たとえば、setnameやsetageなどのように)、それらの値を使用してハッシュされると、どのように格納されますか?何か間違ったことを理解していますか

TIA

documentationから

-R

+0

http://www.boost.org/doc/libs/1_61_0/libs/multi_index/doc/tutorial/basics.htmlの「replace」と「modify」を参照してください。 –

答えて

1

すべてのインデックスが提供する反復子は、定数であるということです、彼らがポイント要素が直接変異させることはできません。これは、順序付きインデックスの場合はstd::setのインターフェイスに従いますが、std::listの後にモデル化されたシーケンス付きインデックスなどの他のタイプの場合は、この制限は発生しません。この一見奇妙な行動は、方法によって課されますmulti_index_container仕事;要素が無差別に変更されることが許されている場合、コンテナに通知されていないmulti_index_containerの順序付けられたインデックスに不一致が導入される可能性があります。要素の変更は、任意のインデックスのupdate operationsによって正しく行われます。言い換えれば

、あなただけがコンテナの更新機能を使用しない限り、保存されたオブジェクトへconstのアクセス権を持っている、それは呼び出しをフックし、オンザフライでハッシュを調整することができ、その時点で。

関連する問題