Разрешено ли std :: map перебалансировать после операций только для чтения (например, Splay-дерево)

Некоторые структуры данных двоичного дерева (такие как Splay деревья) будут повторно сбалансированы при чтении, чтобы переместить элементы, к которым недавно осуществлялся доступ, к корню, так что последующее время поиска может

Разрешено ли это стандартным контейнерам ( std :: map , std :: set )?

По крайней мере, одна проблема - безопасность потоков. Раньше я думал, что пока вы выполняете операции только для чтения со стандартными контейнерами, безопасно делать это из нескольких потоков без использования мьютексов / блокировок и т. Д. Может быть, мне нужно переосмыслить это?

Я знаю, что обычно красно-черные деревья используются для стандартных древовидных контейнеров, и что эти структуры данных обычно не изменяются при чтении. Но будет ли соответствовать гипотетическая реализация, которая действительно изменила?

Мой c ++ - standard-foo нуждается в улучшении, но я не уверен, учитывает ли текущий стандарт безопасность потоков для контейнеров. Отличается ли это в c ++ 0x ?

5
задан templatetypedef 4 February 2012 в 22:08
поделиться