boost庫之MultiIndex
MultiIndex?
它如同是多個STL容器的集合(vector, list, set, map, hash),能具備這一系列優(yōu)點的原因是它允許多個比較謂詞,從而存在多個索引。鑒于幫助文檔中內(nèi)容大多,我下面將以總結(jié)性的方式列出每頁的主要信息。
?
定義一個multiindex,通常是使用typedef,因為它的定義實在很長(這是個好習(xí)慣)
?
typedef multi_index_container <
?????? class Key,
?????? indexed_by <
????????????? ordered_unique< … >,???????????????? // 索引#0, 無重復(fù)排序
????????????? ordered_non_unique< … >, ??????? // 索引#1, 有重復(fù)的排序
????????????? 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返回的是引用
?
現(xiàn)在假如我們有一系列的單詞,想儲存在一個容器中,要求能很快得出某個單詞出現(xiàn)的次數(shù),而且能按原來的順序輸出。
?
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”);
?
看了上面的示例,大概你已經(jīng)明白它到底用來干什么了。編譯這個例子通常容易出錯的是忘記加上
using boost::multi_index_container;
using namespace boost::multi_index;
取之代之為
using namespace boost;
第一個不能編譯的地方就是indexed_by未定義。indexed_by在名字空間boost::multi_index_container內(nèi),后面還有sequenced等。
?
在ordered_unique和ordered_non_unique的說明中要提供一個key extractor鍵提取器和一個可選的比較謂詞。
?
key extraction 鍵提取
?
<略>
?
MultiIndex 小結(jié)我準(zhǔn)備放棄這一個庫了,真的是太多太繁雜了。這個從數(shù)據(jù)庫多重索引的觀念發(fā)展出來的庫,雖然非常有用,但內(nèi)容太多了
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
