-1

可能重复:
为什么 stack<const string> 不能在 g++ 中编译?

我们知道这vector<const int>是不允许的。

但是map<const int, int>map<int, const int>是否map<const int, const int>允许?

为什么不)?

4

2 回答 2

4

向量中的项必须是可复制构造的或(从 C++11 开始)可移动构造的。

地图中的键只需要可破坏,而不是可复制/移动可构造,因此在这方面的要求要宽松得多。

至于为什么会这样,这很简单:当/如果调整向量的大小时,必须将现有缓冲区中的数据复制或移动到新缓冲区中。相比之下,地图通常将其内容存储为树中的节点。一旦创建了一个节点,它就会一直存在,直到它被销毁。虽然树有时确实需要平衡,但这只需要在节点之间操作指针——节点中的键在节点创建后永远不会被修改。

于 2012-12-07T18:11:36.367 回答
0

您需要能够为存储在 STL 容器中的项目插入副本,这就是不允许这样做的原因。

const_iterator您仍然可以使用 const 引用来导出容器,以便通过类方法(getter)进行只读访问。

于 2012-12-07T18:04:41.513 回答