0

私は次のように宣言された地図を持っています

std::map< std::string, std::map<int,std::list<pointers*> > myMap; // in c++.

このマップのエントリを削除するには、myMap.erase(entryToBeDeleted)を呼び出して十分ですか?または、サブマップを繰り返し処理して、最初にすべてを削除してからエントリを削除する必要がありますか?

さらに、内部マップは、キーとしてintを使用し、値としてポインターのリストを使用するマップです。

4

3 に答える 3

0

外側のマップからエントリを削除すると、内側のマップからオブジェクトがアクティブに削除されます。削除するとouter[i]、とのが破棄されます(つまり、デストラクタが呼び出されます)。つまり、内部マップのデストラクタがその要素に対して呼び出されます。内部マップのデストラクタを呼び出すと、内部のすべての要素/オブジェクト(キーと値の両方)のデストラクタが繰り返し呼び出されます。outer[i].firstouter[i].second

于 2013-01-23T01:41:48.230 に答える
0

消去機能は、エントリを削除するためのものであるため、十分なはずです。

さらに疑問がある場合は、これを参照してくださいhttp://www.cplusplus.com/reference/map/map/erase/

于 2013-01-23T01:30:25.683 に答える
0

ネストされたマップの実際のタイプによって異なります。生のポインタが含まれている場合は、ネストされたマップの各アイテムを繰り返し処理してメモリの割り当てを解除する必要があります。それ以外の場合myMap.erase(entryToBeDeleted)は、十分です。

編集:

ネストされたマップにはポインターのリストがあるため、ポインターを削除するには、ネストされた各マップ内の各リストを調べる必要があります。

より良い方法は、スマートポインタを使用することです。

std::map< std::string, std::map<int,std::list<std::unique_ptr<pointers> > > myMap;

ネストされたマップを削除すると、ポインタの割り当てが自動的に解除されます。

于 2013-01-23T01:31:39.100 に答える