c++ - 向 std::map 添加一个没有值的键

标签 c++

假设我定义了一个全局 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/

相关文章:

c++ - shared_ptr<T[]> 包装动态数组的问题

c++ - 在 C++ 中转换为二进制

c++ - 如何实现对 std::array 的绑定(bind)检查?

c++ - Qt 自定义小部件如何将 View 更改通知 ScrollArea 父级

c++ - OpenCV:改变像素的颜色

c++ - GEOS OverlayOp 相交操作

c++ - 发现vc2008中未使用的函数?

c++ - 首次设置凭据 (libgit2)

c++ - 数组中元素的自定义排序

c++ - 在 std::vector::resize 和 std::vector::push_back 中摊销