我们知道vector<const int>
是不允许的。
但允许map<const int, int>
,map<int, const int>
或map<const int, const int>
?
为什么(不是)?
答案 0 :(得分:4)
向量中的项必须是可复制构造的或(从C ++ 11开始)可移动构造。
地图中的关键点只需要是可破坏的,而不是复制/移动可构造的,因此在这方面要求更加宽松。
至于为什么会这样,它非常简单:当/如果向量调整大小时,必须复制现有缓冲区中的数据或将其移动到新缓冲区中。相反,地图通常将其内容存储为树中的节点。一旦创建了一个节点,它就会一直存在,直到它被销毁。虽然树确实需要平衡,但只需要操作节点之间的指针 - 节点中的键永远不会在创建节点后被修改。
答案 1 :(得分:0)
您需要能够为存储在STL容器中的项目插入副本,这就是为什么不允许这样做。
您仍然可以使用const引用从类方法(getter)通过const_iterator
导出容器以进行只读访问。