map
vector
. Этот индекс называется map
. Основное преимущество хеш-таблицы заключается в том, что средняя сложность поиска в ней является (почти) постоянной и не зависит от количества ее элементов, т.е. имеет порядок unordered_map
(доступной в сети веб) или в любом учебнике по структурам данных (ищите в оглавлении Рассмотрим графическую иллюстрацию поиска в (неупорядоченном) векторе, сбалансированном бинарном дереве и хеш-таблице.
• Поиск в неупорядоченном контейнере vector
• Поиск в контейнере map
• Поиск в контейнере unordered_map
Контейнер unordered_map
map
— на основе сбалансированного бинарного дерева, а контейнер vector
— в виде массива. Полезность библиотеки STL частично объясняется тем, что она позволила объединить в одно целое разные способы хранения данных и доступа к ним, с одной стороны, и алгоритмы, с другой.
• Используйте контейнер vector
• Используйте контейнер map
• Используйте контейнер unordered_map
Мы не будем подробно описывать контейнер unordered_map
string
или int
точно так же, как контейнер map, за исключением того, что при обходе элементов они не будут упорядочены. Например, мы могли бы переписать фрагмент кода для вычисления индекса- Доу–Джонса из раздела 21.6.3 следующим образом:unordered_map
typedef unordered_map
for (Dow_iterator p = dow_price.begin; p!=dow_price.end; ++p) {
const string& symbol = p–>first; // the "ticker" symbol
cout << symbol << '\t'
<< p–>second << '\t'
<< dow_name[symbol] << '\n';
}
Теперь поиск в контейнере dow
Неупорядоченные ассоциативные массивы в стандарте языка С++ являются новшеством и еще не стали полноправным его элементом, поскольку они описаны в техническом отчете Комиссии по стандартизации языка С++ (Technical Report), а не в тексте самого стандарта. Тем не менее они широко распространены, а там, где их нет, часто можно обнаружить их аналоги, например, что-нибудь вроде класса hash_map
ПОПРОБУЙТЕ
Напишите небольшую программу, используя директиву #include
unordered_map
не был включен в вашу реализацию языка C++. Если вам действительно нужен контейнер unordered_map
, можете загрузить одну из его доступных реализаций из сети веб (см., например, сайт www.boost.org).21.6.5. Множества
set
set
можно изобразить следующим образом:Например, контейнер set