Мой вопрос касается компромисса между скоростью выполнения и использованием памяти при разработке класса, который будет создан тысячами или миллионами раз и используется по-разному в разных контекстах.
Итак, у меня есть класс, содержащий кучу числовых свойств (хранящихся в int и double). Простым примером может быть
class MyObject
{
public:
double property1;
double property2;
...
double property14
int property15;
int property16;
...
int property25;
MyObject();
~MyObject();
};
Этот класс используется различными программами, которые создают экземпляр
std::vector<MyObject> SetOfMyObjects;
который может содержать до нескольких миллионов элементов. Дело в том, что в зависимости от контекста некоторые или многие свойства могут оставаться неиспользованными (нам не нужно их вычислять в данном контексте), подразумевая, что выделяется память для миллионов бесполезных int и double. Как я уже сказал, полезность и бесполезность свойств зависят от контекста, и я хотел бы избежать написания другого класса для каждого конкретного контекста.
Поэтому я думал об использовании std:: maps для назначения памяти только для свойств, которые я использую. Например
class MyObject
{
public:
std::map<std::string, double> properties_double;
std::map<std::string, int> properties_int;
MyObject();
~MyObject();
};
чтобы при вычислении "property1" он сохранялся как
MyObject myobject;
myobject.properties_double["property1"] = the_value;
Очевидно, я бы определил правильные методы "set" и "get".
Я понимаю, что доступ к элементам в std:: map идет как логарифм его размера, но поскольку количество свойств довольно мало (около 25), я полагаю, что это также не должно замедлять выполнение кода много.
Я слишком сильно задумываюсь над этим? Считаете ли вы, что использование std:: map - хорошая идея? Любое предложение от более опытных программистов будет оценено.