2017-02-16 19 views
0

Кто-то вчера сказал мне, что базовая структура упорядоченной карты - это двоичное дерево поиска. Это не имеет смысла для меня, так как вы не можете получить O (1), если это так. Может ли кто-нибудь объяснить?Какова основная структура std :: map?

Кроме того, если кто-то должен был реализовать хеш-таблицу на C++ без использования stdlib, что было бы лучшим способом сделать это?

+2

где вы узнали, что поиск O (1)? Сначала прочитайте [docs] (http://en.cppreference.com/w/cpp/container/map), во-вторых, они обычно реализуются как [красно-черные деревья] (https://en.wikipedia.org/wiki/Red% E2% 80% 93black_tree), в-третьих, ваш другой вопрос слишком широк. – EdChum

+0

Также постарайтесь ограничить себя вопросом на вопрос. – nwp

ответ

0
  1. Основная структура данных определяется реализацией. Он чаще всего реализуется как дерево Red-Black, которое является самобалансирующимся двоичным деревом поиска. Сложность времени для получения элемента равна O (logn) (см. this)

  2. В качестве отправной точки я просто прочитал бы реализацию std::unordered_map. Я предполагаю, что это учебная деятельность, поэтому чтение и понимание работы STL-реализации было бы хорошим упражнением. Если это не упражнение, используйте std::unordered_map

0

std :: map использует дерево Red-Black, поскольку оно получает разумный компромисс между сложностью вставки/удаления узлов и поиска.

+0

Это относится к текущим реализациям, но стандарт не требуется. (Никто в настоящее время не знает другую структуру данных, которая может отвечать требованиям, но завтра ее можно было бы открыть). –

1

std :: время поиска карты не O (1) его O (log (n)).

std :: unordered_map имеет время поиска O (1), амортизированное.

std :: unordered_map и std :: unordered_set - hashtables.

 Смежные вопросы

  • Нет связанных вопросов^_^