у меня есть тип значения, который я хочу поместить на карту. Он имеет хороший конструктор копирования по умолчанию, но не имеет конструктора по умолчанию.
Я считаю, что пока я не буду использовать оператор []
, все будет в порядке.
Однако я получаю довольно уродливые конструкции, подобные этой, для вставки объекта. (Я думаю, что вставить просто не удается, если для этого ключа уже есть значение).
// 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) );
}
Который, как мне кажется, просканирует карту дважды и тоже выглядит довольно некрасиво.
Есть ли более простой / эффективный способ сделать это?