Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Boost.MultiIndex: How to make an effective set intersection?

assume that we have a data1 and data2. How can I intersect them with std::set_intersect()?

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?
like image 462
Arman Avatar asked Mar 15 '10 15:03

Arman


1 Answers

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());
like image 138
Joaquín M López Muñoz Avatar answered Sep 29 '22 23:09

Joaquín M López Muñoz