既然不对unordered_set<int> nums元素进行排序,*nums.begin()总是一样吗?还是当我们再次访问它时(有时很少)它会改变?
对于每个突变(插入,删除)后的顺序,都无法保证。但是顺序对于给定的内部状态是一致的。因此,重复调用begin()将返回相同的元素,直到您修改容器为止。在那之后,begin()可以返回任何元素。
的unordered_set<T>类,从而实现:
在内部,这些元素不是按任何特定顺序排序的,而是按桶进行组织。元素放入哪个存储桶完全取决于其值的哈希值。这允许快速访问各个元素,因为一旦计算了哈希,它就指向元素所放置的确切存储桶。
因此,返回的第一个元素begin()将取决于容器中其他元素的哈希值,因为这决定了将它们分配到哪个存储桶。因此,每次修改容器时,“第一”元素(实际上是迭代顺序)可能会更改。但是在突变之间,元素的哈希值不会改变,因此顺序将是一致的。