Выбор конкретных объектов, удовлетворяющих условиям - PullRequest
1 голос
/ 12 июля 2011

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

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

1 голос
/ 12 июля 2011

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

...