【问题标题】:Choosing specific objects satisfying conditions选择满足条件的特定对象
【发布时间】:2011-07-12 19:13:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ algorithm stl-algorithm


    【解决方案1】:

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

    【讨论】:

    • 这里的关键词是剖析。如果您希望向量在未来增长,那么使用优先级队列是一个安全的选择。如果你不这样做,那么你必须衡量不同的实现。
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多