Люди задавали аналогичные вопросы об эффективности различных структур данных, но ни одна из прочитанных мною полностью не подходит для моего сценария, поэтому я подумал, есть ли у людей предложения относительно такой структуры, которая была бы адаптирована для эффективного выполнения следующих критериев:
- Каждый элемент будет иметь уникальный ключ.Будет нет вероятность коллизий, потому что каждый элемент хеширует свой ключ. РЕДАКТИРОВАТЬ: * Ключ представляет собой 32-разрядный UINT. *
- Все элементы уникальны и, следовательно, могут рассматриваться как набор .
- Требуются только операции добавления и получения, , а не удаления.Они должны быть быстрыми, так как они будут использоваться несколько сотен тысяч раз в обычном цикле!
- Порядок, в котором хранятся элементы, не имеет значения .
- Скорость важнее, чем потребление памяти ... хотя она не может быть слишком жадной!
Я занимаюсь разработкой для компании, которая будет использоватьпрограмма коммерческая, поэтому любые сторонние структуры данных должны быть без защиты авторских прав или чего-либо еще, но если у STL есть структура данных, которая будет эффективно выполнять эту работу, то это было бы идеально.
Я знаю, что существует бесчисленное множествоСтруктуры данных C ++ в стиле Hashmap / Dictionary с реализациями, которые построены так, чтобы удовлетворять различным критериям, поэтому, если кто-то может предложить один идеал для этой ситуации, то это будет оценено.
Большое спасибо
Редактировать:
Я нашел этот отрывок на SO, который, кажется, предполагает, что unordered_map будет хорошо?
hash_map и unordered_map обычно реализуются с помощью хеш-таблиц.Таким образом, порядок не поддерживается.unordered_map insert / delete / query будет O (1) (постоянное время), где map будет O (log n), где n - количество элементов в структуре данных.Так что unordered_map работает быстрее, и если вам не важен порядок элементов, то предпочтительнее, чем map.Иногда вы хотите сохранить порядок (упорядоченный по ключу), и для этой карты будет выбор.