Как грамотнее реализовать хранение и идентификацию объектов класса?
Имеется база с материалами и их свойствами. В базе у каждого материала есть свой ID по которому можно получить его свойства. Для обработки требуется перенести базу в код, т.к. частые запросы к API базы замедляют работу (считаю, что быстрее будет выгрузить сразу всю базу т.к. кол-во материалов невелико).
Как я могу реализовать подобный принцип у себя в коде? Нужно создать класс Materials и неизвестное кол-во его объектов (зависит от кол-ва материалов в базе).
Как лучше реализовать работу и есть ли способ обращаться к каждому объекту напрямую, не создавая vector из всех объектов и не бегая по нему с if-ом отыскивая нужный ID?
Можно запихнуть Materials в unordered_map, ключом будет ID.
Другой вариант - считывать Materials из базы в vector. А в unorderd_map ссылки (или указатели) на объекты из вектора.
Второй вариант может быть интересен, если поиск объекта надо будет вести не только по ключу. Тогда можно сделать несколько мапов со ссылками на одни и те же объекты из вектора, но с разными ключами.
Чтобы unordered_map принял ID в качестве ключа, нужно, чтобы для ID существовали хеш-функция и оператор сравнения. Если ID целочисленный тип или, например строка std::string (для GUID), проблем не будет.