std::set 是否在内存中连续存储对象?

Does std::set store objects contiguously in memory?

std::set 是否像 std::vector 那样将对象存储在连续内存中?

我没能在网上找到这个,cppreference 没有提到内存分配的细节。但我不明白为什么它不能使用连续内存,因此我的问题。

Does std::set store objects in contiguous memory like std::vector?

不能保证它确实如此。同样在实践中,由于容器的要求,它不能。因此不,它不会将对象存储在连续的内存中。

I can't see why it couldn't use contiguous memory

对集合元素的引用必须在插入和擦除时保持有效(对已擦除元素的引用除外)。此要求与连续内存不兼容。

据我所知,平衡搜索树是唯一可以实现std::set的数据结构。

虽然 std::set 的某些限制使其无法使用连续内存,但并未明确排除。

例如,set::insert 具有对数复杂度,而 vector::insert 需要线性复杂度来打乱其条目。 set::insert 也不会使迭代器无效。这两个要求都不能用连续内存来实现。