https://www.boost.org/doc/libs/1_81_0/libs/multi_index/doc/tutorial/indices.html#guarantees 讨论了迭代器在重散列时的稳定性。然而,这并不一定意味着指针和引用的稳定性。boost::multi_index上的哪些操作(如果有的话)会使指针和引用无效?
boost::multi_index
bgtovc5b1#
对于Boost.MultiIndex的所有索引,只要元素没有被擦除,迭代器、指针和对元素的引用就保持有效。对于散列索引,这与std::unordered_map和其他标准C++无序关联容器提供的保证形成对比,在这些容器中,迭代器的稳定性在重新散列时无法保持--重申一下,如果你有一个迭代器/指针/引用到散列索引中的一个元素,然后再散列这个索引,那么这个迭代器/指针/引用在那之后仍然有效。
std::unordered_map
1条答案
按热度按时间bgtovc5b1#
对于Boost.MultiIndex的所有索引,只要元素没有被擦除,迭代器、指针和对元素的引用就保持有效。对于散列索引,这与
std::unordered_map
和其他标准C++无序关联容器提供的保证形成对比,在这些容器中,迭代器的稳定性在重新散列时无法保持--重申一下,如果你有一个迭代器/指针/引用到散列索引中的一个元素,然后再散列这个索引,那么这个迭代器/指针/引用在那之后仍然有效。