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存储到对象等等。这至少对我来说,感觉很慢,可能由于对象的动态特性而不可行。
对这些想法有任何其他建议或意见?我是否应该继续尝试这些方案和配置文件中的任何一个或两个?
这里的关键词是分析。如果你期望矢量在将来增长,那么使用优先队列是一个安全的选择。如果你不这样做,那么你必须测量不同的实现。 –