2011-07-12 252 views
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存储到对象等等。这至少对我来说,感觉很慢,可能由于对象的动态特性而不可行。

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

回答

1

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

+0

这里的关键词是分析。如果你期望矢量在将来增长,那么使用优先队列是一个安全的选择。如果你不这样做,那么你必须测量不同的实现。 –