Попробуйте boost :: ptr_map (из библиотеки boost :: ptr_container). А с библиотекой boost :: assign вам даже не нужно вызывать new вручную:
class MyObj {
MyObj() { /* some... */ }
};
typedef boost::ptr_map< string, MyObj > MyMap;
MyMap m;
using namespace boost::assign;
ptr_map_insert( m )( "first" )( "second" )( "third" );
В этом случае в m будет добавлено три элемента (с ключами «first», «second» и «third» и с тремя созданными объектами MyObj ()).
Или:
class MyObj {
MyObj( int _i ) : i( _i ) { /* some... */ }
int i;
};
typedef boost::ptr_map< string, MyObj > MyMap;
MyMap m;
using namespace boost::assign;
ptr_map_insert( m )( "first", 1 )( "second", 2 )( "third", 3 );
В этом случае три элемента будут добавлены в m. Первый элемент имеет ключ «first» и значение MyObj (1), второй - «second» и MyObj (2), третий - «третий» и MyObj (3).