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

时间:2016-04-23 12:54:34

标签: c++

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

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;
}

1 个答案:

答案 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 ++时,这种情况正在慢慢发生)

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