Почему сложность контейнера карты С++ STL O (log (n))?

Для контейнеров STL С++, таких как vector и list, сложность поиска элементов и их вставки или удаления не требует пояснений. Однако для контейнера map, хотя из моего чтения я знаю, что сложность/производительность доступа и вставки - O (log (n)), я не могу понять, почему. Я явно не понимаю карты столько, сколько мне нужно, поэтому некоторое просвещение по этой теме было бы очень оценено.

Ответ 1

Элементы карты или множества содержатся в древовидной структуре; каждый раз, когда вы просматриваете node дерева, вы определяете, находится ли элемент, который вы пытаетесь найти/вставить, меньше или больше, чем node. Количество раз, когда вам нужно это сделать (для правильно сбалансированного дерева), является log2 (N), потому что каждое сравнение выбрасывает половину возможностей.

Ответ 2

Как slavik262 точки, карты обычно реализуются с красно-черными деревьями, которые являются самобалансированными. Проверьте сложность красно-черного дерева, например, в wikipedia Я не знаю никакой реализации карты с бинарным деревом; если Марк Рэнсом знает один, я был бы рад узнать, какой из них.