2016-04-23 3 views
1

Пусть я определила глобальную карту -Добавить ключ к StD :: Карты без значения

map<int,list<char>> cMap; 

Есть ли способ (без использования boost библиотеки), что я могу добавить целые ключи, а затем в программе добавьте значения в соответствующие им списки?

map<int,list<char>> cmap; 

int main() 
{ 

// Add only a value this way? 
cmap[2]; 

// and then - 
cmap[2].push_back('A'); 
return 0; 
} 
+0

В чем проблема с тем, что у вас уже есть? Выглядит хорошо для меня. –

ответ

7

Вы уже делаете это.

Когда вы пишете cmap[2], и этот элемент не существует, он создается и создается по умолчанию.

Таким образом, cmap[2] будет пустым. Тогда вы можете .push_back к нему, когда захотите.

Поскольку этот процесс также вызван cmap[2] в cmap[2].push_back(..), вы на самом деле не нужны первоначальная «пустую» инициализация, если не какая-то потребность в проекте для ключа существовать на карте с самого начала (в этом случае , справедливо).

Если вы не хотите, пустой список, чтобы быть значение, но для там нет никакого значения, я думаю, что это глупо, но у вас есть несколько вариантов:

  • Не добавить ключ, либо
    (пусть недостаток ключа означает недостаток значения);
  • магазин std::unique_ptr<std::list<char>> и начать с nullptr
    (ЮК; динамическое размещение без уважительной причины; нет! Спасибо);
  • магазин std::optional<std::list<char>> и начать с cmap[2] = std::none
    (когда Boost.Optional делает это в C++, который происходит, но медленно).

And & hellip; это оно.

+0

Спасибо. но я не понимаю, что произойдет, если я добавлю еще один 'cmap [2];' прямо после 'cmap [2] .push_back ('A');'? что будет со списком? –

+0

@AlexGoft Ничего не случится с этим. Из этого ответа: «Когда вы пишете' cmap [2] ', ** и этот элемент не существует, ** он создается и создается по умолчанию». Когда вы пишете 'cmap [2]', и этот элемент существует, вы просто получаете значение. Поскольку вы ничего не делаете с этим, все элементы в списке останутся в списке. – hvd

+0

@AlexGoft '' A'' попадет в список –

Смежные вопросы