
Hello Joaquin, I am trying to erase a record in the container based on keys - in my case both the keys are ordered and unique and I need to have ways to delete records based on either of the keys. I tried to erase an element based on key2 & I got the following error: "error: no matching function for call to 'boost::multi_index ....<Error runs for more than a page> :erase(boost::multi_index::detail::index_iterator <boost::multi_index::detail::ordered_index_node<boost::multi_index::detail ::index_node_base<MyMap> > >&)' The compiler is perhaps complaining that I havent provided a prototype for erase in the map? In my case I wish to erase the record pointed by the iterator (In another class I had a single index and I didnt have the need to provide a prototype, is it because I have two 'unsigned long' keys that the compiler expects a prototype? )- Kindly help me fix this error. My code is posted as below: Thanks /R --- //fwd decl class A; struct MyMap { unsigned long key1; unsigned long key2; A *pObj; MyMap(unsigned long param_key1, unsigned long param_key2, A *param_pObj): key1(param_key1), key2(param_key2), pObj(param_pObj){} ~LCMap(){ key1 = 0; key2 = 0; pObj = 0; } }; struct key1{}; struct key2{}; typedef multi_index_container< MyMap, indexed_by< ordered_unique< tag <key1>, BOOST_MULTI_INDEX_MEMBER(MyMap, unsigned long, key1)>, ordered_unique< tag <key2>, BOOST_MULTI_INDEX_MEMBER(MyMap, unsigned long, key2)> >
tMapDef;
class MyWrap { private: MyMap MyContainer; .. public: insert(UINT32, UINT32, A *); erasebykey2(unsigned long); }; bool MyWrap::erasebykey2(unsigned long param_key2) { bool ret = FALSE; typedef tMapDef::index<key2>::type tKey2Type; tKey2Type& key2_index = MyContainer.get<key2>(); tMapDef::index_iterator<key2>::type it = key2_index.find(param_key2); if (it == key2_index.end()) { cout << "No matching Recs with key2" <<endl<<; return FALSE; } tMapDef::size_type status = MyContainer.erase(it); }