如果未进行重新哈希处理,为什么unordered_set :: begin()会发生变化?

问题描述 投票:0回答:1

基于读取的https://en.cppreference.com/w/cpp/container/unordered_set/emplace,它指出:仅当新的元素数大于max_load_factor()* bucket_count()时,才进行重新哈希处理。

使用此代码:

int main() 
{ 
    unordered_set<int> myset;
    myset.emplace(4);
    cout << myset.bucket_count() << endl;
    cout << myset.max_load_factor() << endl;

    auto it = myset.begin();
    myset.emplace(3);
    cout << (it == myset.begin()) << endl;
}

[当我第二次放置时,没有重新哈希(桶数为2,最大负载系数为1,就在第二次放置时,这不超过新的元素数2),但是我的begin()迭代器更改。为什么即使没有重新哈希,此迭代器也会无效/更改?

c++ hash iterator
1个回答
0
投票
因此,使用C ++迭代器应该牢记一件事-根本不要缓存它们!除非您每次更改容器不变式时都不要忘记更新迭代器。
© www.soinside.com 2019 - 2024. All rights reserved.