Разница между двумя формами заключается в том, что первая будет терпеть неудачу, если ключ 0 уже присутствует на карте, а второй будет перезаписывать его значение новым.
В С++ 14 вы можете использовать std::make_unique() вместо построения unique_ptr из выражения new. Например:
myMap[0] = std::make_unique<Class1>();
Ответ 2
Если вы хотите добавить существующий указатель для вставки в карту, вам нужно будет использовать std:: move.