• 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 小结

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

  • 相关阅读:
    使用微软WPF技术开发产品优势究竟在那里
    北京地铁的众生相,发上来和大家分享(北京白领生活真实写照)
    长期提供WindowsPhone7培训 & HTML5培训 & Silverlight培训 & WPF培训
    Silverlight中开发和设计人员的合作
    Silverlight 动态调用 WebService
    (学)Lazarus 在 WinCE 下如何取消标题栏上的 OK 或 X 按钮
    (学)新版动态表单研发,阶段成果4
    (学)新版动态表单研发,阶段成果5
    (原)Lazarus下WinCE终端、服务器心跳监控(Ping)源码
    (原)Lazarus 在 Thread 中使用 SQLQuery 查询Oracle 会出现异常
  • 原文地址:https://www.cnblogs.com/lexus/p/2938217.html
Copyright © 2020-2023  润新知