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
也不会使迭代器无效。这两个要求都不能用连续内存来实现。
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
也不会使迭代器无效。这两个要求都不能用连续内存来实现。