Почему стандартная библиотека для C ++ не содержит реализаций хеш-таблиц? - PullRequest
8 голосов
/ 30 июля 2011

Я читал над своим учебником Data Structures and Algorithms: By Mark Allen Weiss, и в нем говорится, что стандартная библиотека не содержит реализаций хеш-таблиц набора или карты, а компиляторы могут предоставлять hash_set и hash_map с одинаковыми функциями-членами класса set и map , Почему бы просто не включить хеш-реализации в стандартную библиотеку? Книга была опубликована в 2006 году. Были ли какие-либо изменения в C ++ с тех пор, чтобы добавить эти реализации в стандартную библиотеку?

1 Ответ

15 голосов
/ 30 июля 2011

То, что вы ищете, называется std::unordered_set/map. Они являются частью C ++ 11 , следующей версии стандарта C ++ (которая должна быть завершена через несколько месяцев). Они также были включены в Технический отчет 1 в 2005 году, который представлял собой список дополнений к стандартной библиотеке C ++ между первым стандартом и следующим. В TR1 они были в пространстве имен std::tr1.

Boost на самом деле поставляется с реализацией TR1 (хотя вы не должны использовать версию std::tr1::shared_ptr, так как обычные boost::shared_ptr и std::shared_ptr в C ++ 11 намного, намного лучше) .

Если я помню, причиной, по которой хеш-таблицы не были изначально представлены в C ++ 98, была просто нехватка времени для комитета по стандартам C ++. По сути, у них была дата отсечения, чтобы отправить товар, а хэш-таблицы этого не сделали.

...