eag*_*101 3 c++ stl unordered-map multimap c++11
std :: multimap和std :: unordered_multimap多久会有一次shuffle条目?我问,因为我的代码传递引用以区分具有相同哈希的条目,并且我想知道何时对它们运行引用重定向功能.
如果我这样做会发生什么:
std::multimap atable; //Type specification stuff left out
//Code that pus in two entries with the same key, call that key foo
int bar = atable[foo];
Run Code Online (Sandbox Code Playgroud)如果它是unordered_multimap,结果会有所不同吗?
返回传递引用以区分具有相同哈希的条目.有更安全的方法吗?
如果我删除其中一个条目,这些条目是否会移动(这是读取std :: vector文档的建议)?
不,任何操作过程中都不会损坏任何元素.
正如在这个着名的问答中解释的那样,对于关联容器,插入/擦除时没有迭代器失效(除了当然要擦除的元素).对于无序的关联容器,在重新散列期间存在迭代器失效,标准说明了这一点(强调我的)
23.2.5无序关联容器[unord.req]
9无序关联容器的元素被组织成桶.具有相同哈希码的密钥出现在同一个存储桶中.当元素添加到无序关联容器时,桶的数量会自动增加,因此每个桶的平均元素数量保持在一个边界之下.重新散列使迭代器无效,元素之间的顺序更改以及桶元素出现的更改,但不会使指针或对元素的引用无效.对于unordered_multiset和unordered_multimap,rehashing保留了等效元素的相对顺序.
同样,这并不需要重新填充实际存储的元素(Key和Value类型unordered_map<Key, Value>),因为无序映射具有组织为链表的存储区,存储元素的迭代器(键值对)具有元素指针和斗指针.reshshing shuffles buckets,它使迭代器无效(因为它们的bucket指针无效),但没有指针或对元素本身的引用.这在另一个问答中有详细解释
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |