std :: set가 메모리에 연속적으로 객체를 저장합니까? 이것을 찾을 수 없었습니다

? std::set같은 연속 메모리에 객체를 저장 합니까 std::vector?

웹에서 이것을 찾을 수 없었습니다 .cppreference는 메모리 할당에 대한 세부 사항을 언급하지 않습니다. 그러나 왜 연속 메모리를 사용할 수 없었는지 알 수 없으므로 내 질문입니다.



답변

std :: set가 std :: vector와 같은 연속 메모리에 객체를 저장합니까?

그럴 것이라는 보장은 없습니다. 또한 실제로는 컨테이너 요구 사항으로 인해 불가능합니다. 따라서 아니오, 연속 메모리에 오브젝트를 저장하지 않습니다.

연속 메모리를 사용할 수없는 이유를 볼 수 없습니다

세트의 요소에 대한 참조는 삭제와 함께 삽입시 삭제 된 요소에 대한 제외를 제외하고는 유효해야합니다. 이 요구 사항은 연속 메모리와 호환되지 않습니다.

내가 아는 한, 균형 검색 트리는 구현할 수있는 유일한 데이터 구조입니다 std::set.


답변

특정 제약 조건으로 std::set인해 연속 메모리를 사용할 수는 없지만 명시 적으로 제외되지는 않습니다 .

예를 들어, set::insert로그 복잡도는 있지만 vector::insert항목을 섞기 위해서는 선형 복잡성이 필요합니다. 또한 set::insert반복자를 무효화하지 않습니다. 연속적인 메모리로는 두 가지 요구 사항을 모두 실현할 수 없습니다.