Словарь/объект 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. Подробнее см. здесь.