Словарь/объект HashTable в С++?
Я ищу реализацию HashTable или Словаря на С++, которая имеет аналогичную функциональность с той, что есть на С#? Есть ли в STL такой объект и как его использовать?
Ответы
Ответ 1
На самом деле, чтобы быть точно таким же, как .NET Dictionary/Hashtable, вам нужно hash_map или unordered_map (std::map
реализуется как двоичное дерево), hash_map
является расширением SС++ L. Однако большинство компиляторов, которые, как мне известно, поставляются с hash_map
, и boost, очевидно, имеют unordered_map
, пока С++ 0x не доступен во всех компиляторах, поэтому вы можете просто использовать его без проблем.
Ответ 2
STL имеет std::map
Ответ 3
STL std::map
может использоваться для создания словаря. std::map
обычно реализуется как дерево поиска, а не хеш-таблица. Это означает, что поиск и вставка имеют разные характеристики производительности, чем С# HashMap
- для очень больших карт средний поиск будет медленнее, особенно если объекты на карте фрагментированы в памяти.
В TR1 нового стандарта С++ у вас есть std::tr1::unordered_map
и std::tr1::unordered_multimap
, которые обычно будут реализованы с использованием хеш-таблицы. Если ваш компилятор не предоставляет эти библиотеки, вы можете использовать реализацию из http://www.boost.org/.
Еще одна альтернатива - Google sparse_hash
.
Ответ 4
Я считаю, что вы ищете map
. Подробнее см. здесь.