У меня возникла некоторая путаница во время выполнения операции find_min в двоичном дереве поиска и двоичной куче. Я понимаю, что возврат min в двоичной куче - это операция O (1). Я также понимаю, почему теоретически возврат минимального элемента в двоичном дереве поиска - это операция O (log (N)). К моему большому удивлению, когда я прочитал о структуре данных в C++ STL, в документации говорится, что возврат итератора к первому элементу в карте (что то же самое, что возврат минимального элемента) происходит за постоянное время! Разве это не должно возвращаться в логарифмическом времени? Мне нужен кто-то, кто поможет мне понять, что C++ делает под капотом, чтобы вернуть это за постоянное время. Поскольку тогда нет смысла использовать двоичную кучу в C++, тогда структура данных карты будет поддерживать извлечение минимума и максимума как в постоянное время, удаление и поиск в O(log(N)) и сохраняет все отсортированным. Это означает, что структура данных имеет преимущества как BST, так и двоичной кучи, связанных в одном!
У меня был спор об этом с интервьюером (на самом деле не спор), но я пытался объяснить ему, что в C++ возврат min и max из карты в C++ (которая представляет собой самобалансирующееся двоичное дерево поиска) происходит за постоянное время. Он был сбит с толку и продолжал говорить, что я ошибаюсь и что бинарная куча — это правильный путь. Разъяснение было бы очень признательно