2013-06-21 26 views
0

我一直在琢磨數據結構問題一段時間,但似乎無法提出一個好的解決方案。我不能擺脫這種解決方案很簡單的感覺,但我只是沒有看到它,所以希望你們能夠幫助!C++中的分層過濾查找

這是問題:我在內存中有大量對象集合。他們每個人都有一些數據字段。某些數據字段(如ID)對於每個對象都是唯一的,但其他字段(如名稱)可以出現在多個對象中。

class Object { 
    size_t id; 
    std::string name; 
    Histogram histogram; 
    Type type; 
    ... 
}; 

我需要的方式,可以讓我快速(即使對象的數量是比較大的,也就是百萬)過濾收集給定對象的成員,而任意數量的規範來組織這些對象所有未指定的成員都算作通配符。例如,如果我指定給定的name,我想檢索名稱成員等於給定名稱的所有對象。但是,如果向查詢添加直方圖,我希望該查詢僅返回namehistogram字段中匹配的對象,依此類推。因此,舉例來說,我想一個函數

std::set<Object*> retrieve(size_t, std::string, Histogram, Type) 

既能做

retrieve(42, WILDCARD, WILDCARD, WILDCARD) 

以及

retrieve(42, WILDCARD, WILDCARD, Type_foo) 

其中第二通話將返回較少或一樣地多對象作爲第一個。哪種數據結構允許像這樣的查詢,並且可以在合理的時間內爲數百萬的對象計數構建和查詢?

感謝您的幫助!

回答

0

首先,您可以使用Boost Multi-indexObject的不同成員執行高效查找。這可能有助於限制要考慮的元素數量。作爲第二步,您可以簡單地使用lambda表達式來實現謂詞std::find_if以獲取第一個元素或使用std::copy_if將所有元素複製到目標序列。如果您決定使用提升,您可以使用filtering的提升範圍。