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

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