boost库之MultiIndex

boost库之MultiIndex_星星的小窝_百度空间

boost库之MultiIndex

MultiIndex

 

它如同是多个STL容器的集合(vector, list, set, map, hash),能具备这一系列优点的原因是它允许多个比较谓词,从而存在多个索引。鉴于帮助文档中内容大多,我下面将以总结性的方式列出每页的主要信息。

 

定义一个multiindex,通常是使用typedef,因为它的定义实在很长(这是个好习惯)

 

typedef multi_index_container <

       class Key,

       indexed_by <

              ordered_unique< … >,                 // 索引#0, 无重复排序

              ordered_non_unique< … >,         // 索引#1, 有重复的排序

              sequenced<>,                             // #2,类list的索引方式

       >

> some_container;

some_container sc;

… …

 

index_by就是提供的索引方法。要获得某个索引,使用get<N>( ),例

 

const some_container::nth_index<1>::type &name_index = sc.get<1>( ); // get返回的是引用

 

现在假如我们有一系列的单词,想储存在一个容器中,要求能很快得出某个单词出现的次数,而且能按原来的顺序输出。

 

using boost::multi_index_container;

using namespace boost::multi_index;

 

vector<string>              vs;

… …

typedef multi_index_container<

       string,

       indexed_by<

              sequenced<>,

              ordered_non_unique<identity<std::string> >

       >

> text_container;

text_container tc;

copy(vs.begin( ), vs.end( ), back_inserter(tc));

text_container::nth_index<0>::type& seq_index = tc.get<0>( );

copy(seq_index.begin( ), seq_index.end( ), ostream_iterator<string>(cout, “ “));    

text_container::nth_index<1>::type& seq_index = tc.get<1>( );

int t = seq_index.count(“string”);

 

看了上面的示例,大概你已经明白它到底用来干什么了。编译这个例子通常容易出错的是忘记加上

using boost::multi_index_container;

using namespace boost::multi_index;

取之代之为

using namespace boost;

第一个不能编译的地方就是indexed_by未定义。indexed_by在名字空间boost::multi_index_container内,后面还有sequenced等。

 

在ordered_unique和ordered_non_unique的说明中要提供一个key extractor键提取器和一个可选的比较谓词。

 

key extraction 键提取

 

<略>

 

MultiIndex 小结

我准备放弃这一个库了,真的是太多太繁杂了。这个从数据库多重索引的观念发展出来的库,虽然非常有用,但内容太多了

posted on 2013-03-01 10:32  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2013/03/01/2938217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值