Мой старый сайт и зеркало-архив (осторожно, на сайте реклама!)
Главная ▶ BedvitCOM ▶ Хеш-таблица
Реализация в COM ассоциативного контейнера, содержащего пары ключ-значение с уникальными ключами. Поиск, вставка и удаление элементов имеют среднюю постоянную сложность.
Часть библиотеки BedvitCOM (начиная с v1.0.4.7, в XLL c v2.0.1.5)
Использован стандартный контейнер С++: std::unordered_map (хеш-таблица)
КЛЮЧ: можно использовать любые данные (не включая ссылки на массивы и объекты), ключ хранится как строка (конвертируется, если нужно, из другого типа данных).
ЗНАЧЕНИЕ: можно использовать любые данные (включая ссылки на массивы, объекты и даже на другую хеш-таблицу)
Методы:
1.Find(key,value) - Поиск значения по ключу, возвращает true, если найден. Если value задан - возвращает значение (опционально)
2.Insert(key,value) - Вставляет пару ключ-значения по ключу, возвращает true, если успешно, false - если ключ уже есть (не перезаписывается)
3.InsertOrAssign(key,value) - Вставляет или перезаписывает пару ключ-значения по ключу, возвращает true, если создан новый и false если обновлен уже существующий.
4.Erase(key) - Удаляет пару ключ-значения по ключу, возвращает true, если успешно.
5.Clear() - Очистить весь контейнер.
6.Size() - Возвращает размер контейнера (количество пар ключ-значение)
7.RangeSet(VARIANT range) - Вставляет пары ключ-значения из массива/диапазона, возвращает количество вставленных пар ключ-значение. Из дубликатов - загружается только первый по порядку.
8.RangeGet(VARIANT range, lowerBound) - Возвращает количество выгруженных элементов в массив с указанной нижней границей массива (по умолчанию = 0)
Следуя названию контейнера, стоит упомянуть, что порядок пар ключ-значение, определяется внутренней реализацией контейнера, и может не совпадать ни с порядком добавления пар, ни с каким-либо еще порядком сортировки и т.д.
т.е. порядок элементов загруженного массива, может не совпадать с порядком элементов выгруженного.
+хранятся только уникальные ключи, т.е. все последующие дубликаты не будут добавлены из исходного массива.
Проведенные тесты и сравнения с Collection и Dictionary (быстрее от нескольких раз до нескольких порядков)
Пример использования в VBA
| Visual BasicСкопировано | ||
|
||