Некоторые структуры данных двоичного дерева (такие как Splay деревья) будут повторно сбалансированы при чтении, чтобы переместить элементы, к которым недавно осуществлялся доступ, к корню, так что последующее время поиска может
Разрешено ли это стандартным контейнерам ( std :: map
, std :: set
)?
По крайней мере, одна проблема - безопасность потоков. Раньше я думал, что пока вы выполняете операции только для чтения со стандартными контейнерами, безопасно делать это из нескольких потоков без использования мьютексов / блокировок и т. Д. Может быть, мне нужно переосмыслить это?
Я знаю, что обычно красно-черные деревья используются для стандартных древовидных контейнеров, и что эти структуры данных обычно не изменяются при чтении. Но будет ли соответствовать гипотетическая реализация, которая действительно изменила?
Мой c ++ - standard-foo нуждается в улучшении, но я не уверен, учитывает ли текущий стандарт безопасность потоков для контейнеров. Отличается ли это в c ++ 0x
?