【问题标题】:Does std::map assign its comparator?std::map 是否分配其比较器?
【发布时间】:2017-12-26 08:50:38
【问题描述】:

map2 的比较器复制到map1 是否需要std::map 复制分配(样式为map1 = map2;)?

我已经测试过实际的实现可以做到这一点。我更感兴趣的是它在 C++ 标准中的指定位置。

【问题讨论】:

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


    【解决方案1】:

    cplusplus.com你可以看到在copy-constructor (3)下说

    (3)map (const map& x);

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

    【讨论】:

    • OP 不是要求提供标准参考吗?此外,cplusplus.com 几乎不是任何可靠的参考。
    • OP 也在询问复制赋值运算符,而不是复制构造函数。
    • 我在询问 operator=。要求它的部分原因是像 cplusplus.com 这样的网站确实没有提供任何关于这个重要细节的信息。见:cplusplus.com/reference/map/map/operator=
    【解决方案2】:

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

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

    强调我的

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

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      相关资源
      最近更新 更多