【问题标题】:loop a std::unordered_map, the sequence is always the sequence I insert elements?循环一个std::unordered_map,序列总是我插入元素的序列?
【发布时间】:2016-12-31 01:47:21
【问题描述】:

我构造了一个 std::unordered_map 并使用 for 循环来访问它。 我发现迭代结果的顺序显示元素是按照我创建这些元素的顺序放置的,无论我如何插入它们。

这部分C++标准是unordered_map,访问时,迭代序列就是插入序列吗?或者这是实现偏好?

我问这个问题是,我想知道这个功能是否可以在我的 c++ 代码中依赖?

【问题讨论】:

  • 不,你不能在你的 C++ 代码中依赖这种行为。
  • 一般来说:不!为了解释您的具体观察:您使用什么作为键?请发布一些示例代码。

标签: c++ c++11 insert sequence unordered-map


【解决方案1】:

没有。该标准不保证无序关联容器 (无序映射、集合及其多值版本)中元素的顺序,并且您不能依赖代码中的任何特定顺序。

除了特殊情况[unord.req]/6(标准草案,强调我的):

如果无序关联容器对于每个键最多包含一个元素,则它支持唯一键。否则,它支持等效键。 unordered_set 和 unordered_map 支持唯一键。 unordered_multiset 和 unordered_multimap 支持等效键。在支持等效键的容器中,具有等效键的元素在容器的迭代顺序中彼此相邻。因此,虽然未指定无序容器中元素的绝对顺序,但它的元素被分组到等效键组中,这样每个组中的所有元素都具有等效键。除非另有说明,否则无序容器上的变异操作应保留每个等效键组中元素的相对顺序。

【讨论】:

    猜你喜欢
    • 2016-01-24
    • 2021-11-12
    • 2012-06-20
    • 2019-11-02
    • 1970-01-01
    • 2020-03-14
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多