假设我定义的全局地图 -添加一键标准::地图,而值
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;
}
假设我定义的全局地图 -添加一键标准::地图,而值
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;
}
你已经在做它。
当您编写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;而已。
谢谢。但我不明白如果我在'cmap [2] .push_back('A');'之后再添加另一个'cmap [2];'会发生什么?清单会发生什么? –
@AlexGoft什么都不会发生。从这个答案中:“当你编写'cmap [2]',**并且该元素不存在时,**它被创建并且默认构建。”当你编写'cmap [2]',并且该元素确实存在时,你只需获取该值。由于您对此不做任何处理,因此列表中的所有项目都将保留在列表中。 – hvd
@AlexGoft''A''将被推入列表中 –
你已经有什么问题了?对我来说看起来很好。 –