В большинстве случаев лучше просто выбросить все в (потенциально) отсортированную std::vector<Person>
. Затем вы можете выполнить бинарный поиск по вектору, чтобы найти элемент. Небольшой вспомогательный класс, который инкапсулирует векторный объект, был бы полезен.
У вас есть преимущество локальности кэша (особенно во время итерации по всем записям). И по крайней мере та же производительность поиска, что и set
или map
(O (log n)). Однако без оптимизации вставка будет несколько хуже (O (n) по сравнению с O (log n)). Если вы выполняете массовую вставку, вы можете просто вставить все элементы, а затем отсортировать вектор, который дает вам заданную / отображаемую производительность.
Приложение : если идентификаторы уникальны и возрастают (без или очень маленькие пробелы) вектор также является очевидным выбором, так как вы можете просто использовать идентификатор в качестве индекса. Если идентификаторы не гарантированы быть последовательными, рассмотрите что-то вроде vector<optional<Person>>
.