我正在存储以下一堆内容
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>,
member<Article, std::string, &Article::title> >
>
> ArticleSet;
现在我有两个迭代器,一个来自index<by_title>
和一个来自index<by_id>
。将这些索引转换为容器的随机访问部分的最简单方法是什么,而不添加数据成员struct Article
?
每个索引都支持通过值生成迭代器迭代器_to http://www.boost.org/doc/libs/1_44_0/libs/multi_index/doc/reference/ord_indices.html#synopsis。如果一个索引中已有指向目标值的迭代器,则可以使用它转换为另一索引中的迭代器。
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)