如果多次迭代std::unordered_set
的元素而不改变集合的内容(但可能从中读取,计算其大小等),是否保证元素将被访问每次订购?
答案 0 :(得分:6)
在你提到的具体情况中,是的。因为标准明确说明何时进行重新散列(因此重新排序)。
仅在插入过程中发生。
§23.2.5[unord.req]
9无序关联容器的元素被组织到存储桶中。键具有相同的哈希值 代码出现在同一个存储桶中。添加元素时,桶的数量会自动增加 到无序的关联容器,以便每个桶的平均元素数保持在下面 一个界限。 Rehashing使迭代器无效,元素之间的顺序更改以及更改哪些存储桶 元素出现,但不会使指针或对元素的引用无效。对于unordered_multiset 和unordered_multimap,rehashing保留了等效元素的相对排序。