假设我定义了一个全局 map -
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]
触发的在cmap[2].push_back(..)
,您实际上并不需要初始的“空”初始化,除非您的项目中要求 key 从一开始就存在于 map 中(在这种情况下,很公平)。
如果您不想让一个空列表成为值,而是因为没有值,我认为这很愚蠢,但您有一些选择:
- 也不要添加 key
(让缺少键意味着缺少值); - 商店
std::unique_ptr<std::list<char>>
并从nullptr
开始
(yuk;没有充分理由的动态分配;不,谢谢!); - 商店
std::optional<std::list<char>>
并从cmap[2] = std::none
开始
(当Boost.Optional
变成 C++ 时,这正在发生但很缓慢)。
然后……就是这样。
关于c++ - 向 std::map 添加一个没有值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36811104/