Если ваше приложение критично к скорости, я советую использовать оператор [], поскольку он создает всего 3 копии исходного объекта, из которых 2 являются временными объектами и рано или поздно уничтожаются как.
Но в insert () создаются 4 копии исходного объекта, из которых 3 являются временными объектами (не обязательно "временными") и уничтожаются.
Что означает дополнительное время для:
1. Выделение памяти для одного объекта
2. Один дополнительный вызов конструктора
3. Один дополнительный вызов деструктора
4. Одно освобождение памяти объектов
Если ваши объекты большие, конструкторы типичны, деструкторы много освобождают от ресурсов, выше количество очков еще больше. Что касается читабельности, я думаю, что оба достаточно справедливы.
Мне вспомнился тот же вопрос, но не о читаемости, а о скорости.
Вот пример кода, с помощью которого я узнал о точке, которую я упомянул.
class Sample
{
static int _noOfObjects;
int _objectNo;
public:
Sample() :
_objectNo( _noOfObjects++ )
{
std::cout<<"Inside default constructor of object "<<_objectNo<<std::endl;
}
Sample( const Sample& sample) :
_objectNo( _noOfObjects++ )
{
std::cout<<"Inside copy constructor of object "<<_objectNo<<std::endl;
}
~Sample()
{
std::cout<<"Destroying object "<<_objectNo<<std::endl;
}
};
int Sample::_noOfObjects = 0;
int main(int argc, char* argv[])
{
Sample sample;
std::map<int,Sample> map;
map.insert( std::make_pair<int,Sample>( 1, sample) );
//map[1] = sample;
return 0;
}