在没有值的情况下向std :: map添加键

Ale*_*oft 1 c++

假设我定义了一张全球地图 -

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)

Lig*_*ica 9

你已经在做了.

当您编写cmap[2]并且该元素不存在时,它将被创建并默认构造.

所以,cmap[2]将是一个空列表.然后你可以.push_back随时随地使用它.

由于此过程也由cmap[2]in 触发,因此cmap[2].push_back(..)您实际上并不需要初始的"空"初始化,除非您的项目中有一些要求从一开始就在地图中存在密钥(在这种情况下,足够公平).

如果你不想让一个空列表成为值,但由于没有值,我认为这很愚蠢,但你有一些选择:

  • 也不要添加密钥
    (让缺少密钥意味着缺少值) ;
  • 存储std::unique_ptr<std::list<char>>并开始nullptr
    (yuk;没有充分理由的动态分配;不,谢谢!) ;
  • 存储std::optional<std::list<char>>和开始cmap[2] = std::none
    (当Boost.Optional它进入C++时,正在发生但很慢).

而且......就是这样.