Выбор конкретных объектов, удовлетворяющих условиям

Допустим, у меня есть объекты, которые выглядят примерно так:

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 ответ

Решение

Ваш последний выбор всегда хороший. Наша интуиция о том, как будет выполняться код, часто ошибочна. Поэтому, где это возможно, профилирование всегда полезно для критического кода.

Другие вопросы по тегам