2016-10-20 8 views
0

私はオブジェクトを挿入しているブーストmulti_indexを作成しました。ブーストで挿入後に見つけることができませんmulti_index

次のように私のmulti_indexが見え、

typedef boost::multi_index_container< 
    Container*, 
    boost::multi_index::indexed_by< 
     boost::multi_index::hashed_unique< 
      boost::multi_index::tag<IndexByUniqueId>, 
      boost::multi_index::const_mem_fun<StoreMe, Id, &StoreMe::getUId> 
     >, 
     boost::multi_index::hashed_non_unique< 
      boost::multi_index::tag<IndexByNonUId>, 
      boost::multi_index::const_mem_fun<StoreMe, std::string, &Container::getNUIdString> 
     > 
    > 
> mi_Container; 

I挿入非ユニークIDをオブジェクトとユニークなIDが最初にオブジェクト内に存在しません。後でプログラムの過程で更新され、その後で "getNUIdString"と "getUId"は0 /空でない値を返します。

この場合、一意でないIDを使用して検索しようとすると、保存された値を取得できません。それは挿入時に満たされることが期待されますか?それとも、必要なときに更新されても、その瞬間に自分の価値を見極めることができますか?

EDIT1:

私は「置き換え」またはインデックスを変化させながら、「変更」を使用してインデックスを更新する必要があることを理解しています。だから最初は空の文字列を1つのインデックスのキーとして挿入し、もう1つのインデックスは0を挿入していましたが、特定の値を使用して検索すると何も返されませんでしたか?つまり、空の文字列 ""を使用して検索すると意味します。それは私にすべての値を返す必要があります(したがって、検索時間O(n)になります)?

Edit2: すべての値を空の文字列にマッピングしようとしました。私はまだ結果が得られません。イテレータの最初のペアはend()と等しくなります。私は値が、私はそれを行うだろうか、そのオブジェクトのセッターに設定されているとき一つだけ NON_UNIQUEキーと値のペアのためのキーの値を変更したい場合も

?私はオブジェクトのセッターを介して値を設定するたびにそれを行いたいので、私が持っているmulti_indexを使ってそれを見ることができます。

TIA

-R

答えて

1

使用すると、1つだけを推測することができます提供し、ほとんどのコンテキストで。 (これは本当にクラスではなく基本的なタイプの別名である場合)

  • あなたは、あなたのIdクラス用に正しくあなたは空の持って挿入した
  • すべての要素をboost::hash_valueoperator==を実装しましたことを提供あなたが本当に何かを挿入するために管理
  • IndexByNonUIdインデックスのキーとして文字列は、
  • 要素は、私は、彼らがタイプContainer *のように、彼らはおそらく削除されることがありますか、参照(有効なまま、(すなわち、コンテナは空ではありません)何か)、
  • 空の範囲よりも別の何かを返す必要がありますIndexByNonUIdインデックス内のヌル文字列を探して、その後、

を要素のキーを変更していません。上のすべての節をチェックしたいかもしれません。

+0

ありがとう@ジョーキン!ここであなたの質問への答えは – codeworks

+0

*インデックスはstd :: stringを返します *はい *はい、デバッガでチェックしました。コンテナに27xxxオブジェクトがあります *私は彼らが知っているので、私はそう思いますbe *はい、置き換えなどを使用して要素のキーを変更することはできません いいえ、equal_range( "")はcontainers.end()の最初のペアを返します – codeworks

+0

必要がある場合はお知らせくださいより多くの情報、私はあなたのためにそれを提供することができます。もう一度ありがとう – codeworks

関連する問題