Вы можете использовать std :: map, как уже предлагалось, который является просто контейнером дерева ab, или вы можете использовать хеш-таблицу, которая потенциально может быть быстрее.Квадратное дерево также является вариантом, который будет гораздо более сложным, чем предыдущие два варианта, но обеспечит ранние варианты.
Хеш-таблица с минимальной загрузкой имеет хорошие шансы быть поиском O (1), но имеет наихудший случай O (n), когда n = элементы присутствуют.Если вы можете сохранить нагрузку ниже примерно 10%, то вам понадобится действительно ужасная функция хеширования, чтобы стать хуже, чем O (1).Это, очевидно, отнимает много дополнительной памяти, но потенциально может быть самым быстрым вариантом.Тип сравнения для хеш-таблицы довольно сложен.У вас есть хеш-функция, которая принимает ввод типа ключа, в данном случае пару шорт, и возвращает индекс.Этот индекс соответствует местоположению в полуфиксированном массиве объектов.Если там уже есть объект, столкновение должно быть разрешено, что может привести к отрицательному времени выполнения, поэтому чем оно меньше, тем лучше.
У четырехугольного дерева наилучшее время возврата в случае O (1),но только для пустых ячеек, в то время как при наличии элемента он имеет время поиска O (log n), где n - размер требуемого поля.Если у вас мало объектов, это может потреблять больше памяти, чем хеш-таблица, но, как указано выше, вы получите приличное время выполнения и поиск, который не даст результатов, может завершиться с относительной скоростью.Тип сравнения для дерева Quad обычно представляет собой каскадную логическую проверку.
Std :: map имеет постоянное время поиска O (log n), где n - элементы на карте.Это наиболее эффективный для памяти вариант, но он имеет гарантированное время выполнения для любого поиска.Тип сравнения для std :: map - это каскадная операция меньше чем, которая в случае с int ((short1 << 16) | short2) также довольно быстрая. </p>
Хороший обзориз контейнеров, которые вы, вероятно, будете использовать.То, что вы должны использовать, зависит от того, насколько загруженным вы ожидаете, что ваш стол будет.С всего несколькими объектами (<500), std :: map, вероятно, ваш лучший выбор.Для 500 до 5000, вы, вероятно, должны использовать четырехугольное дерево.Более того, вы начнете использовать смешное количество памяти для дерева и, вероятно, должны использовать вместо этого хеш-таблицу. </p>