Скажем, у меня есть объекты, которые выглядят примерно так:
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 на объекты и так далее. Это по крайней мере для меня, кажется медленным и, вероятно, это даже невозможно из-за динамической природы объектов.
Любые другие предложения или комментарии по поводу этих мыслей? Должен ли я просто попробовать какую-либо из этих схем и профиль или воспользоваться обеими этими схемами и профилем?