假设我定义了一张全球地图 -
map<int,list<char>> cMap;
Run Code Online (Sandbox Code Playgroud)
有没有办法(不使用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;
}
Run Code Online (Sandbox Code Playgroud)
你已经在做了.
当您编写cmap[2]并且该元素不存在时,它将被创建并默认构造.
所以,cmap[2]将是一个空列表.然后你可以.push_back随时随地使用它.
由于此过程也由cmap[2]in 触发,因此cmap[2].push_back(..)您实际上并不需要初始的"空"初始化,除非您的项目中有一些要求从一开始就在地图中存在密钥(在这种情况下,足够公平).
如果你不想让一个空列表成为值,但由于没有值,我认为这很愚蠢,但你有一些选择:
std::unique_ptr<std::list<char>>并开始nullptrstd::optional<std::list<char>>和开始cmap[2] = std::noneBoost.Optional它进入C++时,正在发生但很慢).而且......就是这样.