連想コンテナ(3)

同じkeyを持っているデータを登録した場合に,前のデータを上書きしたいんだけど,それだと前のデータを削除するやつがいない.かといっていちいち前のデータがあるか確認して削除,その後に挿入となるとvectorなのでコストが掛かってしまう.ということで削除処理を登録してみることにした.

// ポインタなら削除.ポインタでなければ削除しない.
template
struct PtrDeletor { inline static void Deletor(T& t) {}};
template
struct PtrDeletor { inline static void Deletor(T* t) { delete t;}};
//template
//struct PtrDeletor { inline static void Deletor(T& t) {}};
// T&&を避けるためにT&も特殊化しておく?

// 常に何もしない
template< class T>
struct NoneDeletor { inline static void Deletor(T& t) {}};

template<
     typename T
   , typename Key = int
   , template class Deletor = PtrDeletor
>
class AssocVector
{

      :

   void Insert( KeyType key, DataType data) {
      Iterator it = findImpl(key);
      if (it!=v.end() && it->first==key) {
         // 同じkeyが存在するので上書きする
         // 削除処理を呼び出す
         Deletor::Deletor( it->second);
         *it = Item(key, data);
      } else {
         v.insert( it, Item(key, data));
      }
   }

Remove,Clearでも同様の処理を追加する.

しかしなぜ,STLのコンテナは削除処理を持たないのか?
削除処理を持たせずに上手く処理するにはスマートポインタを使わないといけない?