¿Std :: set almacena objetos en memoria contigua como std :: vector?
No hay garantía de que lo haga. También en la práctica, no puede debido a los requisitos del contenedor. Por lo tanto, no, no almacena objetos en la memoria contigua.
No puedo ver por qué no podría usar memoria contigua
Las referencias a elementos del conjunto deben seguir siendo válidas después de su inserción, así como de su borrado (a excepción de las referencias al elemento borrado). Este requisito es incompatible con la memoria contigua.
Hasta donde yo sé, un árbol de búsqueda equilibrado es la única estructura de datos que puede implementar std::set
.
set::insert
requisitos: en.cppreference.com/w/cpp/container/set/insert "... No se invalidan los iteradores ni las referencias ...", por lo que no puede reasignarse cuando necesita expandirse como lostd::vector
hace.