循环a std :: unordered_map,序列始终是i插入元素的序列
loop a std::unordered_map, the sequence is always the sequence I insert elements?
我构建了一个std :: unordered_map,并用于循环访问它。我发现迭代结果的序列表明,无论我如何插入它们,元素都以我创建这些元素的顺序。
C 标准的这一部分是unordered_map访问时,迭代序列是插入序列吗?否则这是实施偏好?
我问这个问题是,我想知道这个功能是否可以依靠我的C 代码?
no。该标准无法保证在无序的关联容器中†(无序的地图,设置及其多值版本)中的元素顺序,并且您无法依靠代码中的任何特定顺序。
†除特殊案例[unord.req]/6(标准草稿,重点是我的):
一个无序的关联容器支持唯一键,如果每个密钥最多包含一个元素。否则,它支持等效键。unordered_set和unordered_map支持唯一键。unordered_multiset和unordered_multimap支持等效键。在支持等效键的容器中,具有等效键的元素在容器的迭代顺序中相邻。因此,尽管未指定无序容器中元素的绝对顺序,但其元素被分组为等效键组,以使每个组的所有元素都具有等效键。除非另有说明,否则在无序容器上突变操作应保留每个等效组中元素的相对顺序。
相关文章:
- 如何在向量数组中插入元素?
- 有没有更快的方法可以在 std::vector 中插入元素
- 映射C++按值排序和插入元素
- 如何在一对集合的向量中插入元素?vector<pair<int,set<string>>>
- 当索引位于末尾和空数组时,向数组插入元素时出现问题
- 在 QSet 中插入元素<QString>并检索 ,删除 QSet 的最后一项
- C++ 在列表末尾插入元素的列表的 STL 向量
- 插入元素后矢量容量增加
- 如何在 c++ 集中插入元素,直到按下 Enter 键
- C++向量插入元素
- 有没有办法在unordered_map的某个位置插入元素
- 重新插入元素可以"re-validate"迭代器吗?
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- 在链表中插入元素
- stl 中是否有任何数据结构可以在 O(1) 或 O(log n) 中插入元素,我可以在其上编写自己的bin_searc
- 如何在将数据结构插入元素后继续迭代数据结构
- 有没有一种方法可以在std::向量的特定位置重复插入元素
- 在向量 (C++) 中保留插入元素的地址
- 插入元素后Unordered_map变空,我做错了什么
- 循环a std :: unordered_map,序列始终是i插入元素的序列