【问题标题】:std::map: can it copy and move keys after they have been inserted?std::map: 插入后可以复制和移动键吗?
【发布时间】:2016-02-21 19:40:49
【问题描述】:

换句话说,从映射中存储指向键的指针是否安全?或者地图是否有可能在其生命周期内复制和移动键,从而使现有指针无效?

文档说:“迭代器有效性:没有变化。”这是否意味着我的问题的答案是“不,它们不能被复制或移动”?

【问题讨论】:

    标签: c++ dictionary stl std


    【解决方案1】:

    std::map 容器模板提供了一个基于节点的 容器,这意味着容器元素的迭代器和引用永远不会失效,直到从地图中删除该元素。因此,只要地图处于活动状态且元素仍在其中,您就可以将元素关键地址分发给第三方。

    【讨论】:

    • 太好了,感谢您的澄清。您是否偶然知道这是在文档中指定的位置?
    • 实现使用基于索引的迭代器以保证有效性但实际元素在内存中移动是否无效?如果不是,这是在哪里说明的?
    • @Chris: [associative.reqmts]/9.
    • @6502:见之前的评论。我不确定它是否在允许“保持迭代器有效”但更改它指向的元素的任何地方说。请注意,例如,具有足够容量的 vector::insert 仅使迭代器 before 插入点有效,所以我会说不,这不是可能的。无论如何,如果你擦除另一个元素,最后一个元素的迭代器会发生什么?
    • @6502 - [associative.reqmts]/9: "insert 和 emplace 成员不应影响迭代器的有效性和对容器的引用,而擦除成员应仅使迭代器和对已擦除元素的引用无效。” (强调)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2014-03-10
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多