std :: map是否分配了它的比较器?

时间:2017-07-20 14:58:12

标签: c++ dictionary language-lawyer assignment-operator

std::map的比较器复制到map1 = map2;需要map2副本分配(样式map1)吗?

我已经测试了实际的实现。我更感兴趣的是它在C ++标准中的位置。

2 个答案:

答案 0 :(得分:11)

如果我们查看[associative.reqmts] / 12,我们有

  

当通过传递比较对象构造关联容器时,容器不应存储对传递的对象的指针或引用,即使该对象是通过引用传递的。当通过复制构造函数或赋值运算符复制关联容器时,目标容器将使用正在复制的容器中的比较对象,就像该比较对象已传递给目标一样容器在它的构造函数中。

强调我的

因此,在您的示例中,map1将获得map2比较器的副本。

答案 1 :(得分:-2)

cplusplus.com你可以看到copy-constructor(3)下面的

(3)n

  

容器保留了alloc的内部副本和 comp ,这些都是使用的   分配存储并在整个生命周期内对元素进行排序。   复制构造函数(3)创建一个保留和使用的容器   x的分配器和比较对象的副本。