是否保证std :: unordered_set元素的迭代顺序始终相同?

时间:2016-03-26 23:26:48

标签: c++ c++11 iteration unordered-set

如果多次迭代std::unordered_set的元素而不改变集合的内容(但可能从中读取,计算其大小等),是否保证元素将被访问每次订购?

1 个答案:

答案 0 :(得分:6)

在你提到的具体情况中,是的。因为标准明确说明何时进行重新散列(因此重新排序)。

仅在插入过程中发生。

§23.2.5[unord.req]

  

9无序关联容器的元素被组织到存储桶中。键具有相同的哈希值   代码出现在同一个存储桶中。添加元素时,桶的数量会自动增加   到无序的关联容器,以便每个桶的平均元素数保持在下面   一个界限。 Rehashing使迭代器无效,元素之间的顺序更改以及更改哪些存储桶   元素出现,但不会使指针或对元素的引用无效。对于unordered_multiset   和unordered_multimap,rehashing保留了等效元素的相对排序。