c – 从Boost多索引迭代器获取数字索引

前端之家收集整理的这篇文章主要介绍了c – 从Boost多索引迭代器获取数字索引前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我存储了一堆以下内容
  1. struct Article {
  2. std::string title;
  3. unsigned db_id; // id field in MediaWiki database dump
  4. };

在Boost.MultiIndex容器中,定义为

  1. typedef boost::multi_index_container<
  2. Article,indexed_by<
  3. random_access<>,hashed_unique<tag<by_db_id>,member<Article,unsigned,&Article::db_id> >,hashed_unique<tag<by_title>,std::string,&Article::title> >
  4. >
  5. > ArticleSet;

现在我有两个迭代器,一个来自索引< by_title>和索引< by_id>中的一个.将这些转换为索引到容器的随机访问部分的最简单方法是什么,而不向结构文章添加数据成员?

解决方法

每个索引都支持使用 iterator_to按值生成迭代器.如果在一个索引中已经有一个目标值的迭代器,则可以使用它转换为另一个索引中的迭代器.
  1. iterator iterator_to(const value_type& x);
  2. const_iterator iterator_to(const value_type& x)const;

要转换为索引,您可以遵循random_access_index.hpp中的模型:

  1. iterator erase(iterator first,iterator last)
  2. {
  3. BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
  4. BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
  5. BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
  6. BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
  7. BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
  8. BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
  9. difference_type n=last-first;
  10. relocate(end(),first,last);
  11. while(n--)pop_back();
  12. return last;
  13. }

猜你在找的C&C++相关文章