zoukankan      html  css  js  c++  java
  • 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 小结

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

  • 相关阅读:
    Asp.net mvc5开源项目"超级冷笑话"
    SQLServer清空日志
    Quartz.net配置文件实例及cron表达式详解
    2.eclipse 插件安装烦死人(2)
    2.eclipse 插件安装烦死人(1)
    1.jdk安装和环境配置
    IOS UI 设计 技术
    ios 缓存策略
    ios 缓存相关信息收集
    ios 流媒体 资料
  • 原文地址:https://www.cnblogs.com/lexus/p/2938217.html
Copyright © 2011-2022 走看看