Выбор конкретных объектов, удовлетворяющих условиям
Допустим, у меня есть объекты, которые выглядят примерно так:
class object
{
public:
// ctors etc.
bool has_property_X() const { ... }
std::size_t size() const { ... }
private:
// a little something here, but not really much
};
Я храню эти объекты внутри вектора, а вектор довольно мал (скажем, не более 1000 элементов). Затем в рамках алгоритма, критичного к производительности, я хотел бы выбрать объект, который обладает свойством X и имеет наименьший размер (если таких объектов несколько, выберите любой из них). Мне нужно сделать этот "выбор" несколько раз, и владение свойством X и его размер могут варьироваться в зависимости от выбора, так что объекты здесь динамичны. Оба запроса (свойство, размер) могут быть сделаны в постоянное время.
Как бы я лучше всего достичь этого? Производительность профилируется, чтобы быть важным здесь. Мои идеи на данный момент:
1) Используйте std::min_element с подходящим предикатом. Для этого, вероятно, также понадобится boost::filter_iterator или что-то подобное для итерации объектов, удовлетворяющих свойству X?
2) Используйте некоторую структуру данных, например, очередь с приоритетами. Я буду хранить указатели или reference_wrappers на объекты и так далее. Это по крайней мере для меня, кажется медленным и, вероятно, это даже неосуществимо из-за динамической природы объектов.
Любые другие предложения или комментарии по поводу этих мыслей? Должен ли я просто пойти дальше и попробовать какую-либо из этих схем и профиля?
1 ответ
Ваш последний выбор всегда хороший. Наша интуиция о том, как будет выполняться код, часто ошибочна. Поэтому, где это возможно, профилирование всегда полезно для критического кода.