2012-12-07 30 views

回答

4

向量中的项必须是可复制构造的或(如C++ 11)move-constructible。

地图中的关键只需要破坏,而不是复制/移动可构造,所以在这方面的要求比较松散。

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

0

您需要能够为存储在STL容器中的项目插入副本,这就是为什么它不被允许。

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

相关问题