4

クラス A のインスタンスに boost::shared_ptr を保持するブースト マルチインデックス構造があります。インデックスの 1 つの "find" 関数を使用すると、実際の値を取得できるイテレータ "it" が取得されます。を介してポインタA* a = it->get();。マルチインデックス構造の関数がポインタやboost::shared_ptrではなくイテレータを取るaことを知って、マルチインデックスから削除するにはどうすればよいですか? erase問題は、オブジェクトを消去したいプログラムのポイントにあります。最初のイテレータはもうなく、実際のポインタしかありません。

ありがとう

4

1 に答える 1

5

erase「マルチインデックス構造の機能」というものはありません。はindexeraseのメンバ関数であり、そのシグネチャはインデックス タイプによって異なる場合があることに注意してください。

特に、順序付きおよびハッシュ化されたインデックスには、次の のオーバーロードがありeraseます。

iterator  erase(iterator position);
size_type erase(const key_type& x);
iterator  erase(iterator first,iterator last);

つまりshared_ptr、 がキーの場合、関数に渡すことができeraseます。もちろん、find最初に呼び出してイテレータを取得し、それを に渡すこともできeraseます。

于 2012-07-19T10:57:07.117 に答える