Почему STL выбирает карту на основе дерева вместо карты на основе хеша? - PullRequest
8 голосов
/ 04 марта 2012

Мне интересно, почему карта STL основана на RB-дереве?Я имею в виду, что карта на основе хеша кажется более эффективной при вставке / удалении или даже получении значенияЕсть какие-то конкретные соображения?

1 Ответ

12 голосов
/ 04 марта 2012

STL изначально выбрал оба.Он имел хеш-таблицу и древовидную карту.

Однако, когда она была принята в стандарт, многие части были удалены, чтобы упростить задачу (было легчеубедить комитет включить меньшую библиотеку, и это потребовало меньше работы в плане фактического определения их поведения).

Таким образом, хеш-таблица была пропущена.

Однако обе структуры данных имеют свои преимущества,В частности, двоичное дерево позволяет упорядочить содержимое карты (вы можете перебирать содержимое карты в отсортированном порядке или запрашивать все элементы, меньшие, чем определенный элемент, например), и я могу только догадываться, что это свойство считалось более важным, чем преимущества производительности хэш-карты.

Однако в C ++ 11 добавлен std::unordered_map, который представляет собой давно потерянную хеш-таблицу,Его первоначальное упущение было просто из-за нехватки времени и, вполне возможно, политики комитетов (сохранение библиотеки небольшим, чтобы минимизировать сопротивление против нее)

...