2011-07-12 248 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

這裏的關鍵詞是分析。如果你期望矢量在將來增長,那麼使用優先隊列是一個安全的選擇。如果你不這樣做,那麼你必須測量不同的實現。 –