假设我有看起来非常粗略的对象:
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 等等。至少对我来说,这感觉很慢,而且由于对象的动态特性,它甚至可能不可行。
对这些想法还有其他建议或意见吗?我应该继续尝试这些方案和配置文件中的任何一个或两个吗?