2010-03-15 74 views
4

假设我们有一个data1data2。我如何将它们与std::set_intersect()相交?Boost.MultiIndex:如何创建一个有效的集合交集?

struct pID 
{ 
    int   ID; 
    unsigned int IDf;// postition in the file 
    pID(int id,const unsigned int idf):ID(id),IDf(idf){} 
    bool operator<(const pID& p)const { return ID<p.ID;} 
}; 

struct ID{}; 
struct IDf{}; 

typedef multi_index_container< 
    pID, 
    indexed_by< 
    ordered_unique< 
    tag<IDf>, BOOST_MULTI_INDEX_MEMBER(pID,unsigned int,IDf)>, 
    ordered_non_unique< 
    tag<ID>,BOOST_MULTI_INDEX_MEMBER(pID,int,ID)> > 
    > pID_set; 

ID_set data1, data2; 
Load(data1); Load(data2); 

pID_set::index<ID>::type& L1_ID_index=L1.data.get<ID>(); 
pID_set::index<ID>::type& L2_ID_index=L2.data.get<ID>(); 
    // How do I use set_intersect? 

回答

5
std::set_intersection(
    L1_ID_index.begin(),L1_ID_index.end(), 
    L2_ID_index.begin(),L2_ID_index.end(), 
    output_iterator, 
    L1_ID_index.value_comp()); 
+0

谢谢你,这个 “L1_ID_index.value_comp()” 我所缺少的。 – Arman 2010-03-16 12:29:57

+0

我想他应该知道,因为他写了图书馆! – shaz 2010-08-15 01:41:06