【发布时间】:2017-12-26 08:50:38
【问题描述】:
将map2 的比较器复制到map1 是否需要std::map 复制分配(样式为map1 = map2;)?
我已经测试过实际的实现可以做到这一点。我更感兴趣的是它在 C++ 标准中的指定位置。
【问题讨论】:
标签: c++ dictionary language-lawyer assignment-operator
将map2 的比较器复制到map1 是否需要std::map 复制分配(样式为map1 = map2;)?
我已经测试过实际的实现可以做到这一点。我更感兴趣的是它在 C++ 标准中的指定位置。
【问题讨论】:
标签: c++ dictionary language-lawyer assignment-operator
从cplusplus.com你可以看到在copy-constructor (3)下说
(3)map (const map& x);
容器保留了 alloc 和 comp 的内部副本,用于 在其整个生命周期内分配存储并对元素进行排序。 复制构造函数(3)创建一个容器,保存并使用 x 的分配器和比较对象的副本。
【讨论】:
cplusplus.com 几乎不是任何可靠的参考。
如果我们查看 [associative.reqmts]/12 我们有
当通过传递比较对象来构造关联容器时,容器不应存储指向所传递对象的指针或引用,即使该对象是通过引用传递的。当通过复制构造函数或赋值运算符复制关联容器时,目标容器应使用被复制容器中的比较对象,就好像该比较对象已传递给目标一样容器在其构造函数中。
强调我的
因此,在您的示例中,map1 将获得map2 的比较器的副本。
【讨论】: