我存储了一堆以下内容
struct Article { std::string title; unsigned db_id; // id field in MediaWiki database dump };
在Boost.MultiIndex容器中,定义为
typedef boost::multi_index_container< Article,indexed_by< random_access<>,hashed_unique<tag<by_db_id>,member<Article,unsigned,&Article::db_id> >,hashed_unique<tag<by_title>,std::string,&Article::title> > > > ArticleSet;
现在我有两个迭代器,一个来自索引< by_title>和索引< by_id>中的一个.将这些转换为索引到容器的随机访问部分的最简单方法是什么,而不向结构文章添加数据成员?
解决方法
每个索引都支持使用
iterator_to按值生成迭代器.如果在一个索引中已经有一个目标值的迭代器,则可以使用它转换为另一个索引中的迭代器.
iterator iterator_to(const value_type& x); const_iterator iterator_to(const value_type& x)const;
要转换为索引,您可以遵循random_access_index.hpp中的模型:
iterator erase(iterator first,iterator last) { BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first); BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last); BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this); BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this); BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last); BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT; difference_type n=last-first; relocate(end(),first,last); while(n--)pop_back(); return last; }