假设我定义了一张全球地图 -
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 :(得分:8)
你已经在做了。
当您编写cmap[2]
并且该元素不存在时,它将被创建并默认构造。
因此,cmap[2]
将是一个空列表。然后你可以随时.push_back
到它。
由于此过程也由cmap[2]
中的cmap[2].push_back(..)
触发,因此您实际上不需要初始“空”初始化,除非您的项目中有一些要求要求密钥存在于地图中从一开始(在这种情况下,足够公平)。
如果你不想让一个空列表成为值,但由于没有值,我认为这很愚蠢,但你有一些选择:
std::unique_ptr<std::list<char>>
并从nullptr
开始
(yuk;没有充分理由的动态分配;不,谢谢!); std::optional<std::list<char>>
并从cmap[2] = std::none
开始
(当Boost.Optional
进入C ++时,这种情况正在慢慢发生)。而且......就是这样。