1

假设我有看起来非常粗略的对象:

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 等等。至少对我来说,这感觉很慢,而且由于对象的动态特性,它甚至可能不可行。

对这些想法还有其他建议或意见吗?我应该继续尝试这些方案和配置文件中的任何一个或两个吗?

4

1 回答 1

1

你最后的选择总是一个好的选择。我们对代码如何运行的直觉常常是错误的。因此,在可能的情况下,分析总是对关键代码有用。

于 2011-07-12T19:19:02.997 回答