2016-04-23 70 views
1

假设我定义的全局地图 -添加一键标准::地图,而值

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].push_back(..)中的cmap[2]触发的,所以实际上并不需要初始“空白”初始化,除非项目中有一些关键要求从开始就存在于地图中(在这种情况下, 很公平)。

如果你不想空列表是价值,但为了有没有价值,我认为这是愚蠢的,但你有一些选择:

  • 不要添加的关键,要么
    (让表示缺少的值);
  • 商店std::unique_ptr<std::list<char>>nullptr
    开始(;动态分配没有充分的理由,议员!不,谢谢);
  • 商店std::optional<std::list<char>>cmap[2] = std::none
    (当Boost.Optional使得它成为C++,它发生,但慢慢地)开始。

&hellip;而已。

+0

谢谢。但我不明白如果我在'cmap [2] .push_back('A');'之后再添加另一个'cmap [2];'会发生什么?清单会发生什么? –

+0

@AlexGoft什么都不会发生。从这个答案中:“当你编写'cmap [2]',**并且该元素不存在时,**它被创建并且默认构建。”当你编写'cmap [2]',并且该元素确实存在时,你只需获取该值。由于您对此不做任何处理,因此列表中的所有项目都将保留在列表中。 – hvd

+0

@AlexGoft''A''将被推入列表中 –