2016-12-02 46 views
0

我的代碼(不是我寫的)使用多索引容器。boost multi_multi索引的用法

typedef boost::multi_index_container< 
     Block*, 
     boost::multi_index::indexed_by< 
      boost::multi_index::random_access<>, 
      boost::multi_index::ordered_non_unique<BOOST_MULTI_INDEX_MEMBER(Block,uint,pages_invalid) > 
     > 
    > active_set; 

typedef active_set::nth_index<0>::type ActiveBySeq; 
typedef active_set::nth_index<1>::type ActiveByCost; 
active_set active_cost; 

「塊」是一類。

該容器被用作優先級隊列。

ActiveByCost::iterator it = active_cost.get<1>().end(); 
    --it; 

我想搜索變量A ==「特定值」的成員。 (不適用於優先隊列)

A是Class Block的成員變量之一。

有沒有辦法做到這一點?

回答

0

我喜歡搜索具有變量A的成員會==「特殊價值」

如果該成員上沒有索引,那麼這將需要在隨機存取線性搜索index:

auto pos = std::find_if(active_cost.begin(), active_cost.end(), 
         [](Block const* p) { return p->A == "specific value"; } 
if(pos == active_cost.end()) 
    // Not found. 
+0

是否「如果這個成員沒有索引」意味着A不是數組? – WKK

+0

@WKK這意味着'boost :: multi_index :: indexed_by <>'中沒有該成員的索引。 –

+0

@maxim_egorushkin謝謝。還有一個問題,我如何訪問multi_index容器的位置數據? – WKK