std :: unordered_set是连续的(比如std :: vector)吗?

Vit*_*meo 6 c++ performance vector unordered-set c++11

我在std :: unordered_set中存储指针,因为我不想要任何重复(我删除了集合中的指针,所以如果有重复,我会尝试删除已经删除的指针).我在这些集合中循环很多,因为我知道std :: vector是最快的循环容器(连续内存),我想知道std :: unordered_set是否也是这样做的.

如果没有,会使用std :: vector并检查指针是否被删除更快?

Mat*_* M. 18

std::unordered_set连续的吗?

标准没有详细说明容器的确切实现...... 但是标准确实规定了许多限制实际表示的行为.

例如,std::unordered_set需要内存稳定:即使添加/删除其他元素,对元素的/地址的引用也是有效的.

实现这一目标的唯一方法是或多或少地独立分配元素.它不能通过连续的存储器分配来实现,因为这样的分配必然是有界的,因此可能过度生长而不可能在更大的块中重新分配元素.

  • @AndrewTomazosFathomlingCorps,但特别是rehashing不会使指针或引用无效.迭代器不一定直接引用内存,指针也是如此.元素在rehash中不会在内存中移动,它们之间的连接(迭代器遍历)可能会被重新连接,但元素不会移动. (2认同)