Algunas estructuras de datos de árbol binario (como Splay árboles) volverán a equilibrarse en lecturas para mover elementos recientemente accedidos hacia la raíz, de modo que el tiempo de búsqueda posterior puede reducirse.Se permite volver a equilibrar std :: map después de operaciones de solo lectura (como un árbol Splay)
¿Los contenedores estándar (std::map
, std::set
) tienen permitido hacer esto?
Al menos una de las preocupaciones es la seguridad de los hilos. Anteriormente, pensé que siempre y cuando solo estuvieras haciendo operaciones de solo lectura en contenedores estándar, era seguro hacerlo desde múltiples hilos sin introducir mutexes/bloqueos, etc. ¿Quizás necesito volver a pensar esto?
Sé que normalmente árboles rojo-negro se utilizan para los contenedores de árbol estándar, y que estas estructuras de datos no suelen modificarse en las lecturas. Pero, ¿se conformaría una implementación hipotética que sí se modificó?
Mi C++ - standards-foo necesita mejoras, pero no estoy seguro de si el estándar actual aborda la seguridad de subprocesos para contenedores. ¿Es esto diferente en c++0x
?
¿No es esta implementación dependiente?¿el estándar simplemente define una interfaz y comportamiento esperado? – Matt
@Matt H: Mi opinión es que este sería un "comportamiento observable" (o, en cualquier caso, según el estándar ...), potencialmente algo que debería abordarse de manera estandarizada. Parte de mi pregunta es si se aborda o no. –