Как следует использовать std :: map со значением, не имеющим конструктора по умолчанию?

у меня есть тип значения, который я хочу поместить на карту. Он имеет хороший конструктор копирования по умолчанию, но не имеет конструктора по умолчанию.

Я считаю, что пока я не буду использовать оператор [] , все будет в порядке.

Однако я получаю довольно уродливые конструкции, подобные этой, для вставки объекта. (Я думаю, что вставить просто не удается, если для этого ключа уже есть значение).

// equivalent to m[5]=x but without default construction

std::map<int,X>::iterator it = m.find(5);
if( it != m.end() )
{
   m->second = x;
}
else
{
  m->insert( std::make_pair(5,x) );
}

Который, как мне кажется, просканирует карту дважды и тоже выглядит довольно некрасиво.

Есть ли более простой / эффективный способ сделать это?

6
задан Michael Anderson 1 December 2011 в 06:32
поделиться